ZZULIOJ 1123: 最佳校友

喜夏-厌秋 提交于 2020-02-15 08:36:33

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。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!