1123: 最佳校友
题目描述
北京校友会每年举办两次,所有校友都有校友编号,每次到会的校友都在签到簿上写下自己的编号和姓名,在校友会成立5周年的聚会上将颁发“最佳校友奖”,该奖项颁发给到会次数最多的校友。现在请你编写程序,找出这个奖项的得主。若有多个校友并列第一,则均可获奖。
输入
输入若干个整数,表示签到簿上的校友编号,所有编号均为0~99的整数,以一个负数作为输入结束的标志。
输出
输出出现次数最多的编号。若获奖选手有多个,则按从小到大的顺序输出选手编号,用空格隔开。
样例输入
4 5 3 1 3 4 2 7 -1
样例输出
3 4
(C语言)
#include<stdio.h>
int main()
{
int a[100]={0},n,i;
while(scanf("%d",&n)&&n>=0)//输入若干整数,并以负数结束
{
a[n]++;//编号n直接当作数组a的第n-1个元素,直接统计同一编号出现的次数
}
int max=a[0];
for(i=1;i<100;i++)
{
if(a[i]>max)
{
max=a[i];
}
}//打擂台得出出现次数最多的编号
for(i=0;i<100;i++)
{
if(a[i]==max)
printf("%d ",i);
}//从小到大输出出现次数最多的编号们
return 0;
}
思路:输入校友编号n时,利用数组实现a[n]++,利用数组直接统计校友到会次数。
利用打擂台法寻找a数组中最大的数,即使存在多个获奖选手,max对应的编号n一定是最小的,所以输出时只用判断a[i]是否等于max ,输出即可,不需要设置flag。
来源:CSDN
作者:木右加木 就是木木
链接:https://blog.csdn.net/VDingLinlin/article/details/104312196