出现次数最多的整数 --- 蓝桥杯

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

150



解题分析 + 代码:



#include <iostream>
#include <cstdio>
#include <string.h>
#define MAXN 200
using namespace std;
int a[MAXN], num[MAXN];
int main()
{
//初始化a数组,都赋值为-1
memset(a, -1, sizeof(a));
int n, count = 0;
//先输入n共有几次
scanf("%d", &n);
//这里先输入a[0]
//是为了后面输入的有比较的对象
scanf("%d", &a[count]);
++num[count];
//循环输入,由于是从小到大的输入
//如果和前面输入的相等那么就在前面的num[]计数数组中加加,
//如果不是的话,就在num相应的位置中加入一个新元素的个数
for(int i = 0; i <= n; i++)
{
int temp;
scanf("%d", &temp);
if(temp == a[count])
{
++num[count];
}
else
{
++count;
a[count] = temp;
++num[count];
}
}
//检查第一个插入的元素是否为-1
if(a[0] == -1)
return 0;

int max = 0;
for(int j = 0 ; j <= count; j++)
{
if(num[j] > max)
max = num[j];
}
//在计数的数组中选出对应元素计数的值最大的那一个,
//接着找到计数最多的那个元素
//输出,并且是输出最小的,因此只需要输出一个,
//这里加了一个break,是为了克服出现两个计数相同不同元素,
//并且由于本题是由小到大输入,因此找到第一个等于max的元素就是
//要输出的元素
for(int k = 0; k <= count; k++)
{
if(num[k] == max)
{
cout<<a[k]<<endl;
break;
}
}
return 0;


}

0 0
原创粉丝点击