写一段c语言代码 众数问题 题目描述 给你一个序列a1,a2...an,每个数单独统计它出现的次数,统计完成后,按照出现次数排序,请你计算出这个序列里出现第一多的数和出现第二多的数的分别出现的次数 出现次数排序中数c在数d前面的定义是数c的出现次数a >= 数d的出现次数b。换言之,假如出现第一多的数c出现的个数为a,出现第二多的数d出现次数为b,(c不等于d)那么ab之间满足a >= b 例如,如果在一个序列中2出现了3次,1也出现了3次,而其他数字出现的次数都小于3,那么我们认为整个序列中出现第一多的数的次数为3,出现第二多的数出现次数也为3 输入 第一行一个正整数t,表示有t组数据 每一组第一行一个正整数n,表示序列长度为n 每一组第二行,输入n个正整数 序列长度最大不超过100,序列中的最大数不会超过100,最小不会小于1 输出 序列当中第一多和第二多的数的个数
时间: 2023-10-07 21:14:12 浏览: 45
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100
#define MAX_NUM 100
int cmp(const void *a, const void *b) {
return *(int *)b - *(int *)a; // 从大到小排序
}
int main() {
int t, n, a[MAX_N], count[MAX_NUM + 1];
scanf("%d", &t);
while (t--) {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
qsort(a, n, sizeof(int), cmp); // 排序
for (int i = 1; i <= MAX_NUM; i++) {
count[i] = 0;
}
for (int i = 0; i < n; i++) {
count[a[i]]++; // 统计每个数出现的次数
}
int max1 = 0, max2 = 0;
for (int i = 1; i <= MAX_NUM; i++) {
if (count[i] > count[max1]) {
max2 = max1;
max1 = i;
} else if (count[i] > count[max2]) {
max2 = i;
}
}
printf("%d %d\n", count[max1], count[max2]);
}
return 0;
}
```