1123 最佳校友

题目来源:
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\n",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("\n");
34     return 0;
35 }

 

posted @ 2017-05-01 22:20  Reqaw  阅读(470)  评论(0编辑  收藏  举报