蓝桥杯 算法训练 出现次数最多的整数 C语言 ALGO50

问题描述
  编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
  输入格式:第一行是一个整数NN £ 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。
  输出格式:输出只有一行,即出现次数最多的那个元素值。

样例输入

5
100
150
150
200
250

样例输出

150

思路

定义另一个数组来存放每个数出现的次数,这里我是倒着数的,先让最后一个数字出现的次数为1,如果前面那个数和它相同,那就让前面的数字的次数等于这个数字的次数加1。例如1 3 3 5 5 5,先令最后一个5出现的次数为1,往前一个数字和它相同,所以倒数第二个数字出现的次数就是1+1=2,同理,倒数第三个5就是在倒数第二个5的基础上加1,即2+1=3。最后再从前往后找次数的最大值,只有大于不等于的情况才让index换值,这样能保证并列第一的情况下输出小的那个。

注意!!!要判断 n 是否小于0,否则提交后会是80分!

代码

#include <stdio.h>

int main(void){
	int n;
	scanf("%d",&n);
	if(n <= 0)
		return 0; 
	int a[n];
	int count[n];
	
	int i;
	for (i = 0; i < n; i++) {
		scanf("%d", &a[i]);
	}
	
	count[n-1] = 1;
	for (i = n-2; i >= 0; i--) {
		if (a[i] == a[i+1])
			count[i] = count[i+1] + 1;
		else
			count[i] = 1;
	}
	
	int max = count[0];
	int index = 0;
	for (i = 0; i < n; i++){
		if(max < count[i]) {
			max = count[i];
			index = i;
		}
					
	}
	printf("%d",a[index]);
	return 0;
}

最近更新

  1. TCP协议是安全的吗?

    2024-03-17 18:52:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-17 18:52:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-17 18:52:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-17 18:52:02       20 阅读

热门阅读

  1. php反序列化及其常见魔术方法及其触发条件

    2024-03-17 18:52:02       19 阅读
  2. mysql备份

    2024-03-17 18:52:02       18 阅读
  3. logrotate 日志文件管理工具介绍和经典案例

    2024-03-17 18:52:02       21 阅读
  4. 【MySQL】GROUP_CONCAT 运用易错点之建立方程

    2024-03-17 18:52:02       23 阅读
  5. kubeadm部署Kubernetes(k8s) 1.23.0高可用集群

    2024-03-17 18:52:02       22 阅读
  6. 简单理解promise。。。

    2024-03-17 18:52:02       22 阅读
  7. python爬取B站CC字幕(隐藏式字幕)

    2024-03-17 18:52:02       19 阅读