Problem Description
根据输入的int 数组建立哈希表,然后查找是否存在相应元素。
Input Description
第一行为测试数据的组数n, 下面有n组测试数据。对于每组测试数据,第一行为用空格隔开的int数列,数量不超过1,000,000,下面一行为查找数目m, 接下来的m行为m个需要查找的数(int型)。
Output Description
每组测试数据输出m行,如果存在相应的元素,输出“Yes.”,否则输出“No.”。
Sample Input
1
1 2 4 5 3 6
2
1
7
Sample Output
Yes.
No.
Hint
哈希吧, 骚年们。
我的想法:
我的代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string.h>
using namespace std;
#define m 100
typedef struct
{
int key;
}HashTable[m];
char str[m];
int IsNum(char ch)
{
if (ch >= '0' && ch <= '9')
{
return 1;
}
return 0;
}
int GetNum(int &i)
{
int num = 0;
int n = 1;
if (IsNum(str[i]))
{
num = num * n + (str[i] - '0');
i++;
n = 10;
}
return num;
}
void Search(HashTable &H, int ch)
{
if (H[ch].key == ch)
{
cout << "Yes." << endl;
return;
}
cout << "No." << endl;
}
int main()
{
int n;
cin >> n;
HashTable H;
getchar();
while (n--)
{
gets(str);
int length = strlen(str);
for (int i = 0; i < length; i++)
{
if (str[i] != ' ')
{
int num = GetNum(i);
H[num].key = num;
}
}
int s, g;
cin >> s;
while (s--)
{
cin >> g;
Search(H, g);
}
}
return 0;
}