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 输出 序列当中第一多和第二多的数的个数
时间: 2024-02-25 10:59:31 浏览: 70
以下是 C 语言的实现:
```c
#include<stdio.h>
#include<string.h>
#define MAX_N 100
int t, n;
int a[MAX_N + 5];
int cnt[MAX_N + 5], top1, top2;
int main() {
scanf("%d", &t);
while(t--) {
memset(cnt, 0, sizeof(cnt));
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
cnt[a[i]]++;
}
top1 = top2 = 0;
for(int i = 1; i <= MAX_N; i++) {
if(cnt[i] >= cnt[top1]) {
top2 = top1;
top1 = i;
} else if(cnt[i] > cnt[top2]) {
top2 = i;
}
}
printf("%d %d\n", cnt[top1], cnt[top2]);
}
return 0;
}
```
思路解析:
这道题需要统计每个数在序列中出现的次数,可以使用一个数组 $cnt$ 来记录。然后遍历一遍 $cnt$ 数组,找出出现次数最多的数和出现次数次多的数即可。
阅读全文