思路:
明白输出的含义就容易解出:第一行输出的1是读者1喜欢的2号书另外还有读者3喜欢,第二行输出的BeiJu是读者2喜欢的3号书没有其他人喜欢,第三行输出的1是读者3喜欢的2号书另外还有读者1喜欢,第四行输出的BeiJu是读者4喜欢的1号书另外没有其他人喜欢。
解答:
#include <cstdio>
#include <cstring>
using namespace std;
int main() {
int reader_num, book_num;
while(scanf("%d %d", &reader_num, &book_num) != EOF) {
int lover_num[book_num + 1]; // 喜欢第i本书的人数,下标从1开始
int fav_book[reader_num + 1]; // 第i个读者喜欢的书的序号,下标从1开始
memset(lover_num, 0, sizeof(lover_num)); // 置每本书的喜欢者为0
for(int i = 1; i <= reader_num; i++) {
int book; // 第i个读者喜欢的书的序号
scanf("%d", &book);
fav_book[i] = book; // 保存第i个读者喜欢的书的序号到fav_book数组
lover_num[book]++; // 序号为book的书的喜欢者人数+1
}
for(int i = 1; i <= reader_num; i++) { // 遍历输入的读者信息
if(lover_num[fav_book[i]] > 1) // 如果第i个读者喜欢的书至少有2人以上喜欢
printf("%d\n", lover_num[fav_book[i]] - 1); // 打印这本书的喜欢人数-1(朋友人数要排除自己)
else
printf("BeiJu\n");
}
}
return 0;
}