原题链接:众数问题
解题思路:与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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复