问题描述
编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
输入格式:第一行是一个整数 N, N £ 20;接下来有 N行,每一行表示一个整数,并且按照从小到大的顺序排列。
输出格式:输出只有一行,即出现次数最多的那个元素值。
输入输出样例
编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
输入格式:第一行是一个整数 N, N £ 20;接下来有 N行,每一行表示一个整数,并且按照从小到大的顺序排列。
输出格式:输出只有一行,即出现次数最多的那个元素值。
输入输出样例
样例输入
5
100
150
150
200
250
100
150
150
200
250
样例输出
150
这个题不难,比较坑的地方是,测试数据有n<=0的情况
#include<iostream>
using namespace std;
int main()
{
int n,count=1,maxcount=1;//count 用来计数,maxcount用来记录最高次数
long long a[25]={0},maxvalue,tmp;//a数组用来存数,maxvalue用来存最大数
cin>>n;
if(n>0)
{
cin>>a[0];
maxvalue=a[0];
tmp=a[0];//初始化
for(int i=1;i<=n;i++)//注意从1开始到n
{
if(i<n)//当i大于n的时候要跳到else
cin>>a[i];
if(a[i]==tmp&&i<n)//统计数出现的频率
count++;
else//如果数发生改变
{
if(i<n)
tmp=a[i];
if(count>maxcount)
{
maxcount=count;
maxvalue=a[i-1];
}
count=1;//千万不要忘记数发生改变后count重新置1
}
}
cout<<maxvalue<<endl;
}
return 0;
}
或者直接用关联容器map
#include <iostream>
#include <map>
using namespace std;
map<int,int> a;
typedef map<int,int>::iterator iter;
int main()
{
int n,tmp,Max=0,Maxi=0;
cin>>n;
if(n>0)
{
for(int i=0;i<n;i++)
{
cin>>tmp;
a[tmp]++;
}
for(iter i=a.begin();i!=a.end();i++)
if(i->second>Maxi)
{
Maxi=i->second;
Max=i->first;
}
cout<<Max<<endl;
}
return 0;
}