- 题目描述:
-
输入数组长度 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
采用了哈希的办法,玩嘛1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <string> 5 #include <cmath> 6 #define MAX 103 7 8 struct Number 9 { 10 int key; 11 bool isVaild; 12 }; 13 Number map[MAX]; 14 15 int main(int argc, char const *argv[]) 16 { 17 int n, m; 18 while(scanf("%d",&n) != EOF) { 19 int temp; 20 for(int i = 0; i < MAX; i++) { 21 map[i].isVaild = false; 22 } 23 for(int i = 0; i < n; i++) { 24 scanf("%d",&temp); 25 int num = temp%100; 26 while(map[num].isVaild == true) { 27 num++; 28 if(num == 100) { 29 num = 0; 30 } 31 } 32 map[num].key = temp; 33 map[num].isVaild = true; 34 } 35 scanf("%d",&m); 36 for(int i = 0; i < m; i++) { 37 scanf("%d",&temp); 38 int num = temp%100; 39 if(map[num].isVaild == false) { 40 puts("NO"); 41 } 42 else { 43 bool flag = true; 44 while(flag) { 45 if(map[num].key == temp) { 46 puts("YES"); 47 flag = false; 48 break; 49 } 50 num++; 51 if(num == 100) { 52 num = 0; 53 } 54 } 55 if(flag == true) { 56 puts("NO"); 57 } 58 } 59 } 60 } 61 return 0; 62 }
当然,普通的办法好像速度也不慢
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <string> 5 #include <cmath> 6 #define MAX 101 7 8 int num[MAX]; 9 10 int main(int argc, char const *argv[]) 11 { 12 int n, m; 13 while(scanf("%d",&n) != EOF) { 14 15 for(int i = 0; i < n; i++) { 16 scanf("%d",&num[i]); 17 } 18 scanf("%d",&m); 19 20 for(int i = 0; i < m; i++) { 21 int temp; 22 scanf("%d",&temp); 23 bool flag = false; 24 for(int j = 0; j < n; j++) { 25 if(temp == num[j]) { 26 puts("YES"); 27 flag = true; 28 break; 29 } 30 } 31 if(flag == false) { 32 puts("NO"); 33 } 34 } 35 } 36 return 0; 37 }