原题链接:谁是你的潜在朋友
解题思路:
①:输入N,M,N表示人数,M表示书的编号的最大值
②:所有书的编号为1,2,3......M
③:定义数组read_like[N]用于存放N个阅读者们,各自喜欢的书的编号
④:定义数组book_liks[M+1](其下标为0到M)每个下标分别对应书的编号
⑤:初始化book_liks[M+1]为0
⑤:输入N个人各自喜欢的书的编号,然后根据编号找到book_liks中对应下标元素,并使该下标
元素加1
⑥:最后book_liks[M+1]中每个元素的值就表示相喜欢以该元素下标为编号的人的数目
)如:book_liks[i]=4,1<=i<=M,代表喜欢编号为i的人的数目
⑦:最后根据存储在read_like[N]中每个人喜欢的编号,找到book_liks[M+1]中相应元素,
即若:book_liks[read_like[i]] =4, 0<=i<N ,表示与第i个人喜欢一样的书的人数为4,所以第i个人潜在的朋友有:4-1=3个;
注意事项:
没有潜在朋友输出BeiJu
参考代码:
#include <stdio.h> #include <malloc.h> int main() { int *reader_like, *book_liks; int N, M; while ( scanf( "%d%d", &N, &M ) != EOF ) { reader_like = (int *) malloc( N * sizeof(int) ); book_liks = (int *) malloc( (M + 1) * sizeof(int) ); for ( int i = 0; i < M; i++ ) book_liks[i] = 0; for ( int i = 0; i < N; i++ ) /*输入每位读者喜欢书的编号*/ { scanf( "%d", &reader_like[i] ); book_liks[reader_like[i]]++; } for ( int i = 0; i < N; i++ ) { if ( book_liks[reader_like[i]] == 1 ) printf( "BeiJu\n" ); else printf( "%d\n", book_liks[reader_like[i]] - 1 ); } } return(0); }
别忘点赞哦-.-
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复