解题思路:
①:输入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 人评分
//请教!!!为啥我的代码正确50% #include <stdio.h> #include <string.h> #define MAX 100000 int main() { int N,M; int array[MAX]; int counts[MAX]; memset(array,0,sizeof(array)); memset(counts,0,sizeof(counts)); while(scanf("%d%d",&N,&M)!=EOF) { for(int i=0; i<N; i++) { scanf("%d",&array[i]); } for(int i=0; i<N; i++) { for(int j=0; j<N; j++) { if(array[i]==array[j]&&i!=j) { ++counts[i]; } } } for(int i=0; i<N; i++) { if(counts[i]) printf("%d\n",counts[i]); else printf("BeiJu\n"); } } return 0; }
C二级辅导-分段函数 (C语言代码)浏览:665 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:772 |
C语言训练-最大数问题 (C语言代码)浏览:633 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:1514 |
上车人数 (C语言代码)浏览:767 |
C语言训练-求PI* (C语言代码)浏览:613 |
三角形 (C++代码)递推浏览:755 |
【蟠桃记】 (C语言代码)浏览:1021 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:531 |
字符逆序 (C语言代码)浏览:608 |