ALGO-90 出现次数最多的整数(范围特判)

91 阅读1分钟

ALGO-90 出现次数最多的整数

时间限制:1.0s 内存限制:512.0MB

问题描述
编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
输入格式:第一行是一个整数N,N £ 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。
输出格式:输出只有一行,即出现次数最多的那个元素值。
输入输出样例
样例输入
5
100
150
150
200
250
样例输出
150

解题思路

这道题不难,为什么写呢,,,我只能说这个题简直了。。。
唯一的坑,,n<=0的时候不输出
我可没有忘记这个范围,我只是,,,在n<=0的时候输出的0。。。天哪
没有特判这个的话,过80%
n<0和n=0各占90%

完整代码

#include<iostream>
using namespace std;
int main()
{
    int n;
	cin>>n;
	if(n<=0)
		return 0;
	int nn[1002];  //存数据
	int ans[2002];  //记录个数
	int an[2002];  //记录个数对应的树
	int k=0;
	for(int i=0;i<n;i++)
		cin>>nn[i];
	if(n==1)
	{
		cout<<nn[0];
		return 0;
	}
	int num=1;
	for(int i=0;i<n-1;i++)
	{
		if(nn[i]==nn[i+1])
			num++;
		else
		{
			ans[k]=num;
			an[k]=nn[i];
			num=1;
			k++;
		}
	}
	if(nn[n-2]!=nn[n-1])
		ans[k]=1;
	else
	{
		ans[k]=num;
		an[k]=nn[n-1];
	}
	int max=-99999999;int j;
	for(int i=0;i<=k;i++)
	{
		if(max<ans[i])
		{
			max=ans[i];
			j=i;
		}
	}
	cout<<an[j];
    return 0;
}