原题链接:众数问题
解题思路:与1558类似。
每种众数都对应有其重数,所以可定义一个结构体:包含众数和对应的重数。在程序中输入自然数,然后与结构体数组(众数表)中的众数比较是否有相应的众数,如果有,则重数加1,如果没有,则把输入的颜色加到众数表中,并设置重数为1。
选出重数最多的,然后存放到另一个数组中,再按众数排序找到最小即可输出。
参考代码:
#include<bits/stdc++.h>
using namespace std;
typedef struct
{
int num; //众数
int count; //众数num的重数
}Number;
Number a[50000],b[50000];
int cmp(Number a,Number b)
{
return (a.num<b.num);
}
int main()
{
int i,j,n,x,k=0;
int max=1;
cin>>n;
while(n--)
{
cin>>x;
for(i=0;i<k;i++) //在众数数组中查找有没有x
{
if(x==a[i].num) //找到,则重数加1
{
a[i].count++;
if(max<a[i].count)
max=a[i].count;
break;
}
}
if(i==k) //没有找到把x作为新的众数放到数组中,同时设置重数为1
{
a[k].num=x;
a[k].count=1;
k++; //众数个数加1
}
}
for(i=0,j=0;i<k;i++) //把重数最大的找出来,并保存到数组b中
{
if(a[i].count==max)
{
b[j].num=a[i].num;
b[j].count=a[i].count;
j++;
}
}
sort(b,b+j,cmp); // 排序
cout<<b[0].num<<endl; //输出最大重数对应的最小众数
cout<<b[0].count<<endl;
return 0;
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复