题目描述 :
北京校友会每年举办两次,所有校友都有校友编号,每次到会的校友都在签到簿上写下自己的编号和姓名,
在校友会成立5周年的聚会上将颁发“最佳校友奖”,该奖项颁发给到会次数最多的校友。现在请你编写程
序,找出这个奖项的得主。若有多个校友并列第一,则均可获奖。
输入
输入若干个整数,表示签到簿上的校友编号,所有编号均为0~99的整数,以一个负数作为输入结束的标志。
输出
输出出现次数最多的编号。若获奖选手有多个,则按从小到大的顺序输出选手编号,用空格隔开。
解题思路:
1.编写排序函数。2.统计同一编号出现的次数,跟之前的数气球颜色差不多。
代码实现:
1 #include<stdio.h> 2 #define N 100 3 int main() 4 { 5 int a[N]={0},n,i,max,l=0; 6 while(scanf("%d",&n),n>=0) 7 { 8 a[n]++; 9 } 10 max=a[0]; 11 for(i=0;i<N;i++) 12 { 13 if(a[i]>=max) 14 max=a[i]; 15 } 16 for(i=0;i<N;i++) 17 { 18 if((a[i]==max)&&l==0) 19 { 20 printf("%d ",i); 21 l=1; 22 } 23 else if(a[i]==max) 24 printf("%d",i); 25 } 26 }
易错分析:
1.直接用输入的编号做数组下标可以省去查找的步骤,然后每个元素的数值即使编号也就是数组下标的出现次数。
2.用打擂台的方式先找出最大值。
3.然后用标志变量来判断是否是第一个出现的最佳校友。