给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出 用C示例
时间: 2023-12-03 07:42:37 浏览: 147
以下是一个简单的C语言示例代码,用于统计n个整数的出现次数并按出现次数从多到少输出:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100000
int cmp(const void *a, const void *b) {
return *(int *)b - *(int *)a;
}
int main() {
int n, i, j, cnt, cur;
int a[MAX_N], b[MAX_N]; // a存储输入的整数,b存储每个整数出现的次数
scanf("%d", &n);
for (i = 0; i < n; ++i) {
scanf("%d", &a[i]);
}
qsort(a, n, sizeof(int), cmp); // 对输入的整数进行从大到小排序
cur = a[0];
cnt = 1;
j = 0;
for (i = 1; i < n; ++i) {
if (a[i] == cur) {
++cnt; // 当前整数出现次数加1
} else {
b[j++] = cnt; // 将当前整数的出现次数存入数组b中
cur = a[i]; // 更新当前整数
cnt = 1; // 重置当前整数的出现次数
}
}
b[j++] = cnt; // 将最后一个整数的出现次数存入数组b中
qsort(b, j, sizeof(int), cmp); // 对数组b进行从大到小排序
for (i = 0; i < j; ++i) {
printf("%d %d\n", b[i], a[i]); // 输出每个整数出现的次数和整数本身
}
return 0;
}
```
这段代码使用了一个计数数组b来记录每个整数出现的次数,并且对计数数组b进行从大到小排序,最后按照排序后的顺序输出每个整数出现的次数和整数本身。
阅读全文