当前位置: 代码迷 >> 综合 >> 题目1173:查找 九度OJ
  详细解决方案

题目1173:查找 九度OJ

热度:55   发布时间:2023-09-24 06:57:46.0
题目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;
}




  相关解决方案