用c语言写出来
时间: 2023-10-11 16:09:36 浏览: 26
好的,以下是C语言的实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int key;
int value;
} Node;
int cmp(const void* a, const void* b) {
return ((Node*)b)->value - ((Node*)a)->value;
}
int main() {
int t;
scanf("%d", &t);
while (t--) {
int n;
scanf("%d", &n);
int* arr = (int*)malloc(sizeof(int) * n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// 统计每个数出现的次数
Node* nodes = (Node*)malloc(sizeof(Node) * n);
int count = 0;
for (int i = 0; i < n; i++) {
int flag = 0;
for (int j = 0; j < count; j++) {
if (nodes[j].key == arr[i]) {
nodes[j].value++;
flag = 1;
break;
}
}
if (!flag) {
nodes[count].key = arr[i];
nodes[count].value = 1;
count++;
}
}
// 按出现次数排序
qsort(nodes, count, sizeof(Node), cmp);
// 统计第一多和第二多的数出现次数
int a = nodes[0].value;
int b = 0;
for (int i = 1; i < count; i++) {
if (nodes[i].value != a) {
b = nodes[i].value;
break;
}
}
printf("%d %d\n", a, b);
free(nodes);
free(arr);
}
return 0;
}
```
思路和C++版本相同,只是语法不同,需要手动实现一些C++中的库函数。