蓝桥杯备战 算法训练 出现次数最多的整数(注释详解)

算法训练 出现次数最多的整数

问题描述
  编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数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( ̄▽ ̄)ブ!!!

发布了22 篇原创文章 · 获赞 8 · 访问量 1504

猜你喜欢

转载自blog.csdn.net/OWCYKH/article/details/104123867