题目描述:
输入数组长度 n
输入数组 a[1…n]
输入查找个数m
输入查找数字b[1…m]
输出YES or NO 查找有则YES 否则NO 。输入:
输入有多组数据。
每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1<=m<=n<=100)。输出:
如果在n个数组中输出YES否则输出NO。
样例输入:
5
1 5 2 4 3
3
2 5 6样例输出:
YES
YES
NO
普通遍历方法,AC代码:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
int main()
{
int n,m;
int buf[1000],x[1000];
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++){
scanf("%d",&buf[i]);
}
scanf("%d",&m);
for(int i=0;i<m;i++){
scanf("%d",&x[i]);
}
for(int i=0;i<m;i++){
int j;
for(j=0;j<n;j++){
if(x[i]==buf[j]){
printf("YES\n");
break;
}
}
if(j==n){
printf("NO\n");
}
}
}
return 0;
}
/*
5
1 5 2 4 3
3
2 5 6
*/
我们也可以使用二分查找来实现,AC代码为:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
int main()
{
int n,m;
int buf[1000],x[1000];
while(scanf("%d",&n)!=EOF){
for(int i=0; i<n; i++){
scanf("%d",&buf[i]);
}
sort(buf,buf+n);
scanf("%d",&m);
for(int i=0; i<m; i++){
scanf("%d",&x[i]);
}
for(int i=0; i<m; i++){
int start=0,top=n-1;
bool flag=false;
while(top>=start){
int mid=(start+top)/2;
if(buf[mid]==x[i]){
flag=true;
break;
}else if(buf[mid]<x[i]){
start=mid+1;
}else{
top=mid-1;
}
}
if(flag==true)
printf("YES\n");
else printf("NO\n");
}
}
return 0;
}
/*
5
1 5 2 4 3
3
2 5 6
*/