《算法笔记》codeup_100000582_A

思路:

明白输出的含义就容易解出:第一行输出的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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值