很白痴的一个问题!!!囧。。。
描述给定N个整数,M个问题
对于每个问题,你需要回答数字A是否在N个数字里出现过
输入
第一行是两个整数N和M ( 0 < N , M < 100000)
接下来的一行,共有N个整数
接下来的M行,每行有1个整数A
输出
共M行,
对于每个询问,若A出现过,则输出YES
否则 输出NO
样例输入
5 2
1 2 3 4 5
5
0
样例输出
YES
NO
问题我知道了,第二行输入中包含-1时WA了。。。
eg:
5 2
1 -1 2 3 4
-1
NO
1
YES
既然不能返回一个数值,那么怎么办呢?把函数定义为bool型能行吗?那该怎么弄?
#include<iostream>
using namespace std;
int search(int key,int min,int max,int a[])
{
int mid;
while(min<=max)
{
mid = (min + max)/2;
if(key == a[mid]) return mid;
else if(key < a[mid]) return search(key,min,mid-1,a);
else if(key > a[mid]) return search(key,mid+1,max,a);
}
return -1; //查找失败返回-1
}
int main()
{
int i,n,m,key;
int a[100000];
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
while(m--)
{
scanf("%d",&key);
if(search(key,0,n-1,a) == -1)
printf("NO\n");
else printf("YES\n");
}
return 0;
}