题目要求如下:
由于使用的是C语言,如果使用的是其他编程语言,可以使用哈希表很简单的解决这个问题。
由于C语言中不存在哈希表,对于这样简单的问题,手动构造哈希表太繁琐。
可以使用如下的思路来快速解决。
我们使用2个数组,其大小为201,由于M可以等于200,因此对应的大小需要至少201。
当输入时我们首先将读者的爱好的书号存储在1个数组中,接着查看对应的书号表中原先是否已经存在值。如果对应的书号的数组中存在对应的值,则将其值加上1,表示有n个人喜欢该书号的书。
下面是实现的代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
int n, m;
while (scanf("%d %d", &n, &m) != EOF) {
int p;
int arr[201] = {0};
int c[201] = {0};
for (int j = 0; j < n; ++j) {
scanf("%d", &p);
arr[j] = p;
// 书号喜欢的人加1
c[p]++;
}
for (int i = 0; i < n; ++i) {
int num = c[arr[i]] - 1;
if (num <= 0) {
printf("BeiJu\n");
} else {
printf("%d\n",num);
}
}
}
return 0;
}
比如读者2和13都喜欢书号为3的书,那么数组c中索引为2的书的值将为2。
再输出时,我们查询对应读者喜欢的书的号,再在书号表中查看其对应的值,从而得到有多少个读者喜欢该书。将最后得到的值减去1,需要减去读者自身,从而知道谁是你的潜在朋友。
下面是最终通过后的结果: