原题链接:众数问题
解题思路:
将输入的自然数作为数组的下标,每当出现相同的自然数时,该自然数对应的下标所对应的值就加一,最后每个下标所对应的值就是相同自然数出现的总次数
注意事项:
参考
max.sum < brr[i] 该行代码一定不能加等于号,否则最后输出的就是最大的自然数和其出现的次数
代码:
#include<stdio.h>
typedef struct max_num { //定义一个结构体,用于记录结果,也可以不用结构体,直接用两个整型变量也行
int m;
int sum ;
}max_num;
int main() {
int n;
max_num max;
int arr[50000] = { 0 }; //将两个数组元素全部初始化为0 arr[] 可以不初始化为0,但brr[]一定要初始化为0
int brr[50000] = { 0 }; //因为题目没说输入的自然数的范围,所以brr的长度一定要足够长
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]); //输入n个自然数
}
for (int i = 0; i < n; i++) {
brr[arr[i]]++; //将输入的n个自然数分别作为brr[]的数组下标 例如arr[0]=1,brr[1]=0+1;arr[10]=1,brr[1]=1+1;
} //该循环完毕后,brr[]下标所对应的值就是同一个自然素的出现的次数;
max.sum = arr[0]; //初始化max.sum和max.n;
max.m = 0;
for (int i = 0; i < n; i++) {
if (max.sum < brr[i]) //遍历整个brr[],当出现最大数有多个时,只会统计下标小的,即题目所要求的较小的自然数
max.sum = brr[i], max.m = i; //切记 max.sum < brr[i] 该比较语句不能加等于号,否则最后输出结果就是最大的
} //自然数和它出现的次数
printf("%d\n%d", max.m, max.sum);
return 0;
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复