CCF CSP 认证 201503-2 数字排序 C语言

这段代码是用C语言实现的,其功能是遍历输入的数组,找出出现次数最多的数字,将其计数重置为0,然后寻找新的最多次的数字。程序中提到的问题是缺少最后的if判断,可能导致无法正确处理未达到最大值的数字出现情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 循环遍历数组,找出出现次数最多的,记录后再改为0,那么第二次遍历就是出现次数第二多的,循环结束,数组所有元素的值都应为0。

开始没有考虑到比最大数字小的数字不一定都会出现,漏写最后的if判断,导致只能拿50分 T_T

 

#include <stdio.h>
int main() {
	int n,i,j;
	scanf("%d",&n);
	int a[1002]={0};
	int max=0;
	for(i=0;i<n;i++) {
		int y;
		scanf("%d",&y);
		max=max>y?max:y;    //max表示出现的数字的最大值
		a[y]++;
	}
	for(i=0;i<max;i++) {
		int Max=a[0],temp=0;    //Max表示某个数字出现次数的最大值、temp表示该数字
		for(j=1;j<=max;j++) {
			Max=Max>a[j]?Max:a[j];
		}
		for(j=0;j<=max;j++) {
			if(Max==a[j]) 
			{	temp=j;
				a[j]=0;
				break;
			}
		}
	if(Max!=0) printf("%d %d\n",temp,Max);  //if语句判断是否需要输出 最大值为max,
                                        //说明至多需要输出max句语句(1-max均出现过)
	}                                   //没有if判断可能会输出“某个数字出现零次”
	return 0;
}

### CCF CSP 历年考试真题及解答 以下是关于CCF CSP历年考试真题及其C语言解答的相关信息: #### 2015年3月试题 在2015年3月的CCF CSP认证考试中,有一道名为“数字排序”的题目。该题要求考生编写程序来统计输入数据中的频率并按特定顺序输出[^3]。 下面是这道题目的解决方案: ```c #include<stdio.h> #include<string.h> int main() { int arr[1010]; int v[1010]; int n; scanf("%d", &n); memset(arr, 0, sizeof(arr)); memset(v, 0, sizeof(v)); int i, temp; for (i = 0; i < n; i++) { scanf("%d", &temp); arr[temp]++; // 记录出现次数的最大值 v[arr[temp]] = 1; } int j; for (i = 1000; i > 0; i--) { if (v[i] == 1) { for (j = 0; j < 1000; j++) { if (arr[j] == i) { printf("%d %d\n", j, i); } } } } return 0; } ``` 这段代码实现了对输入数组的计数排序功能,并按照指定的要求输出结果。 #### 2022年6月试题 对于更近期的试题,例如2022年6月的CCF CSP认证考试,提供了多道不同难度级别的题目以及对应的满分解答链接[^2]。具体如下表所示: | **试题编号** | **试题名称** | **最高得分** | **我的题解** | |--------------|--------------------|-------------|---------------| | 202206-1 | 归一化处理 | 100 | 查看题解 | | 202206-2 | 寻宝!大冒险! | 90 | 查看题解 | 通过点击表格中的“查看题解”,可以访问每一道题的具体解析和源码实现。 #### 推荐学习资料 为了更好地准备此类竞赛,《算法笔记》这本书籍被广泛推荐给希望深入研究算法设计与分析的学生们阅读参考[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值