用C语言编写一个程序,给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出,次数相同时先输出值较小的数。 输入说明: 输入的第一行包含一个整数n,表示给定数字的个数。 1 ≤ n ≤ 1000。 第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。给出的数都是不超过1000的非负整数。 输出说明: 输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
时间: 2023-05-29 17:07:48 浏览: 97
```c
#include <stdio.h>
int main() {
int n, i, j, temp;
scanf("%d", &n);
int nums[n]; // 存放给定的数字
int count[1001] = {0}; // 计数数组
for (i = 0; i < n; i++) {
scanf("%d", &nums[i]);
count[nums[i]]++; // 统计每个数字出现的次数
}
// 冒泡排序
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (count[nums[j]] < count[nums[j + 1]] || (count[nums[j]] == count[nums[j + 1]] && nums[j] < nums[j + 1])) {
// 如果前一个数字出现的次数比后一个数字少,或者两个数字出现的次数相同但前一个数字更小
// 则交换两个数字的位置
temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
// 输出结果
for (i = 0; i < n; i++) {
if (count[nums[i]] != 0) {
printf("%d %d\n", nums[i], count[nums[i]]);
count[nums[i]] = 0; // 避免重复输出相同的数字
}
}
return 0;
}
```
阅读全文