题目来源:
https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1123
Description
北京校友会每年举办两次,所有校友都有校友编号,每次到会的校友都在签到簿上写下自己的编号和姓名,在校友会成立5周年的聚会上将颁发“最佳校友奖”,该奖项颁发给到会次数最多的校友。现在请你编写程序,找出这个奖项的得主。若有多个校友并列第一,则均可获奖。
Input
输入若干个整数,表示签到簿上的校友编号,所有编号均为0~99的整数,以一个负数作为输入结束的标志。
Output
输出出现次数最多的编号。若获奖选手有多个,则按从小到大的顺序输出选手编号,用空格隔开。
Sample Input
4 5 3 1 3 4 2 7 -1
Sample Output
3 4
题意描述:
输入若干个校友编号
计算并输出出现次数最多的那个编号,若不唯一,则从小到大排列输出,中间用空格隔开
解题思路:
运用桶排序,找出出现次数最多的那一个,最后再遍历数组找出相同次数的编号输出即可
程序代码:
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int x,a[1100],count,max,flag,i,n; 6 memset(a,0,sizeof(a)); 7 while(scanf("%d",&x),x>=0) 8 { 9 a[x] += 1; 10 } 11 for(max=0,i=0;i<1000;i++) 12 { 13 if(a[i]) 14 { 15 //printf("a[%d]=%d ",i,a[i]); 16 if(a[i]>max) 17 max=a[i]; 18 } 19 } 20 for(flag=0,i=0;i<1000;i++) 21 { 22 if(a[i]==max) 23 { 24 if(flag) 25 printf(" %d",i); 26 else 27 { 28 flag=1; 29 printf("%d",i); 30 } 31 } 32 } 33 printf(" "); 34 return 0; 35 }