解题思路:
将输入的自然数作为数组的下标,每当出现相同的自然数时,该自然数对应的下标所对应的值就加一,最后每个下标所对应的值就是相同自然数出现的总次数
注意事项:

参考

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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论