Codeup[100000582]谁是你的潜在朋友

题目要求如下:
在这里插入图片描述由于使用的是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,需要减去读者自身,从而知道谁是你的潜在朋友。
下面是最终通过后的结果:
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值