题目1173:查找
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:9215
解决:5052
-
题目描述:
-
输入数组长度 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
-
来源:
- 2010年北京邮电大学网院研究生机试真题
- 以下为遍历查找。
-
-
#include <cstdio> #include <iostream> using namespace std; int a[105],b[105]; int main(){ int n; while(scanf("%d",&n)!=EOF){ int m; for(int i=0;i<n;i++){ cin>>a[i]; } scanf("%d",&m); for(int i=0;i<m;i++){ cin>>b[i]; } for(int i=0;i<m;i++){ int flag=0; for(int j=0;j<n;j++){ if(b[i]==a[j]){ cout<<"YES"<<endl; flag=1; break; } } if(flag==0){ cout<<"NO"<<endl; } } } return 0; }
- 以下为二分查找。
-
-
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; int a[105],b[105]; int main(){ int n; while(scanf("%d",&n)!=EOF){ int m; for(int i=0;i<n;i++){ cin>>a[i]; } sort(a,a+n); scanf("%d",&m); for(int i=0;i<m;i++){ cin>>b[i]; } for(int i=0;i<m;i++){ int start=0,end=n-1,flag=0,mid; while(end>=start){ mid=(start+end)/2; if(b[i]>a[mid]){ start=mid+1; }else if(b[i]<a[mid]){ end=mid-1; }else if(b[i]==a[mid]){ flag=1; cout<<"YES"<<endl; break; } } if(flag==0){ cout<<"NO"<<endl; } } } return 0; }
-
-