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-15 11:03:53 浏览: 128
c代码-计算数字出现的次数
5星 · 资源好评率100%
以下是C语言的代码实现:
```
#include <stdio.h>
#define MAX_N 100
int main() {
int t;
scanf("%d", &t);
while (t--) {
int n;
scanf("%d", &n);
int a[MAX_N + 1] = {0};
for (int i = 0; i < n; i++) {
int x;
scanf("%d", &x);
a[x]++;
}
int max1 = 0, max2 = 0;
for (int i = 1; i <= 100; i++) {
if (a[i] > a[max1]) {
max2 = max1;
max1 = i;
} else if (a[i] > a[max2] && i != max1) {
max2 = i;
}
}
printf("%d %d\n", a[max1], a[max2]);
}
return 0;
}
```
解释:
1. 首先,通过 `scanf` 读入测试数据组数 `t`。
2. 对于每组测试数据,先读入序列长度 `n`,然后用数组 `a` 统计每个数出现的次数。
3. 初始化 `max1` 和 `max2` 分别为 0,表示出现次数最多的数和次多的数的下标。接着遍历数组 `a`,如果当前数的出现次数大于 `a[max1]`,则更新 `max1` 和 `max2`;如果当前数的出现次数大于 `a[max2]` 且不等于 `max1`,则更新 `max2`。
4. 最后输出 `a[max1]` 和 `a[max2]`,即出现次数最多的数和次多的数的出现次数。
注意事项:
1. 数组 `a` 的下标是数的大小,因此要开到 100。
2. 如果出现次数最多的数和次多的数的出现次数相同,也要按照题目要求输出。
阅读全文