CCF-201312-1-出现次数最多的数(C++)

试题编号: 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;	                                                           
}

猜你喜欢

转载自blog.csdn.net/qq_41318400/article/details/89359795