您的位置:首页 > 编程语言 > C语言/C++

CCF CSP认证考试历年真题 数字排序 C语言实现

2017-10-20 14:14 309 查看
试题编号:201503-2

试题名称:数字排序 时间限制:1.0s 内存限制:256.0MB

问题描述:

问题描述

给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。

输入格式

输入的第一行包含一个整数n,表示给定数字的个数。第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。

输出格式

输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。

样例输入

12

5 2 3 3 1 3 4 2 5 2 3 5

样例输出

3 4

2 3

5 3

1 1

4 1

评测用例规模与约定1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。

分析:

很简单一道题,不过题目要求” 如果两个整数出现的次数一样多,则先输出值较小的 “所以我们用到排序算法时要用稳定排序算法(冒泡排序、插入排序、基数排序、归并排序),不能使用快排,选择排序等不稳定排序。

代码在此:

#include<stdio.h>
#include<string.h>

/*
201503-2 数字排序
*/

int main()
{
//	freopen("input.txt", "r", stdin);

int arr[1010];
int v[1010];
int n;

scanf("%d", &n);

memset(arr, 0, sizeof(arr));
memset(v, 0, sizeof(v));
int i;
int 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: