试题编号: 201312-1
试题名称: 出现次数最多的数
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
输入格式
输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。
输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。
输出格式
输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。
样例输入
6
10 1 10 20 30 20
样例输出
10
解题思路:用一个数组的下标来存放第二行输入的数,而这个数组的值则是次数,因为题目已经明确第二行的数字一定非0,所以判断第二个数组b[i]的值最大的,将条件限制为只有当最大值大于b[i]的值才会将最大次数更新,这就保证了如果有很多最大的,那么输出的是最小的。
代码做进一步说明
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a[1024];
for(int i=1;i<=n;i++)
cin>>a[i];
int b[10010]={0};//数组下标存这个数,数组值存这个数出现的次数
for(int i=1;i<=n;i++)
{
int b_i=a[i];
b[b_i]++;
}
int max=0; //默认次数是0
int ans;
for( int i=1;i<10010;i++)
{
if(b[i]>max&&b[i]!=0) // 大于保证了输出的是最多并且是最多的中最小的
{
max=b[i]; //这个就是最大次数
ans=i;
}
}
cout<<ans<<endl;
return 0;
}