九度oj 题目1173:查找

题目描述:

输入数组长度 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 }


原文地址:https://www.cnblogs.com/jasonJie/p/5691389.html