算法训练 出现次数最多的整数
问题描述
编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
输入格式:第一行是一个整数N,N £ 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。
输出格式:输出只有一行,即出现次数最多的那个元素值。
输入输出样例
样例输入
5
100
150
150
200
250
样例输出
150
时间限制:1.0s 内存限制:512.0MB
题解
废话不多说,直接上代码
#include<iostream>
using namespace std;
int main()
{
long long a[20];
int n,i;
cin >> n;
if (n > 0 && n <= 20)
{
for (i = 0; i < n; i++)
cin >> a[i];
int y = 0, mmax = 1, max,ans;//y计数器,mmax最大值连续次数,ans输出最大值
max = a[0];//设第一项是最大值
for (i = 0; i < n; i++)
{
if (a[i] != max)//相等的数中断
{
y = 0;
max = a[i];
y++;
}
else
y++;
if (y > mmax)//连续两次就将此值记为最大值
{
ans = max;
mmax = y;//以上个计数为基准,比如y=mmax=2
//那么想要大于它就只能是一组三个连续的数值
}
}
cout << ans;
}
return 0;
}
总结
1.本题题目恰好规定了该数组是按从小到大的顺序排的,所以不用考虑数组排序问题。
2.核心思路就是计数和存储最大值。是循环和判断的灵活应用。
3.题解中int定义a数组也可以,只不过用long long定义数组内的数可以使计算速度大为减少。
4.C++的输入流cin自带换行功能(顺着输入也能运行),而且不用写取地址符,非常方便。
打卡第三天o( ̄▽ ̄)ブ!!!