原题链接:谁是你的潜在朋友
解题思路:
①:输入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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
 
//请教!!!为啥我的代码正确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; }