求助
查看原帖
求助
206423
焚魂楼主2020/11/4 17:48

就是想知道为什么这段代码:

#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;

int n,m;
int x[100010];
int a;

int work(int l,int r)
{
	if(l==r)
	{
		if(x[l]==a)
		return l;
		else
		return -1;
	}
	int mid=(l+r)/2;
	if(a<=x[mid])
	work(l,mid);
	else
	work(mid+1,r);
}

int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	cin>>x[i];
	
	for(int i=1;i<=m;i++)
	{
		cin>>a;
		int l=work(1,n);
		if(x[l]==a)
		cout<<x[l]<<" ";
		else
		cout<<-1<<" ";
	}
	
	return 0;
}

有问题,但是这一段代码:

#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;

int n,m;
int x[1000010];
int a;

int work(int xx[],int l,int r,int k)
{
	if(l==r)
	{
		if(xx[l]==k)
		return l;
		else
		return -1;
	}
	int mid=(l+r)/2;
	if(a<=xx[mid])
	work(xx,l,mid,k);
	else
	work(xx,mid+1,r,k);
}

int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	cin>>x[i];
	
	for(int i=1;i<=m;i++)
	{
		cin>>a;
		cout<<work(x,1,n,a)<<" ";
	}
	
	return 0;
}

却是对的呢?感觉都是一样的

2020/11/4 17:48
加载中...