c语言【问题描述】 输入一组无序的整数,编写程序按照整数出现次数由多到少输出整数及其出现次数,若出现次数相同,则按照输入顺序输出。 【输入形式】 先从标准输入读入整数的个数(大于等于1,小于等于100),然后在下一行输入这些整数,各整数之间以一个空格分隔。 【输出形式】 在标准输出上按照整数出现次数由多到少输出整数及其出现次数,每行显示一个整数及其出现次数,两者以一个空格分隔,出现次数后跟一个回车;若出现次数相同,则按照输入顺序输出。
时间: 2023-06-08 11:08:30 浏览: 102
c语言+从键盘输入10个无序的整数,存放在数组中,找出数组中最大值与最小值的所在的位置,并输出数组元素所在的位置与数组元素的值
5星 · 资源好评率100%
我理解了你的问题。以下是用C语言解决此问题的代码:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int number;
int count;
int order;
} Node;
int cmp(const void* a, const void* b) {
Node* node1 = (Node*)a;
Node* node2 = (Node*)b;
if (node1->count != node2->count) {
return node2->count - node1->count;
}
return node1->order - node2->order;
}
int main() {
int n;
scanf("%d", &n);
Node* nodes = (Node*)malloc(n * sizeof(Node));
int* exist = (int*)calloc(10010, sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", &nodes[i].number);
nodes[i].count = ++exist[nodes[i].number];
nodes[i].order = i;
}
qsort(nodes, n, sizeof(Node), cmp);
for (int i = 0; i < n; i++) {
if (nodes[i].count == 0) {
break;
}
printf("%d %d\n", nodes[i].number, nodes[i].count);
}
return 0;
}
```
这个程序中,首先读入整数个数 n,然后读入 n 个整数,并记录每个整数出现的次数和顺序。为了方便排序,我们将这些信息放在一个结构体中。然后,我们按照出现次数由多到少,顺序由早到晚的顺序进行排序。最后,输出排序后的整数及其出现次数。
这个程序主要用到了排序算法,因此用到了 C 语言的标准库函数 qsort()。如果你对排序算法不熟悉,我可以再给你一些参考资料。
阅读全文