请用c语言使得输入第一行一个正整数t,表示有t组数据,每一组第一行一个正整数n,表示序列长度为n,每一组第二行,输入n个正整数(序列长度最大不超过100,序列中的最大数不会超过100,最小不会小于1),然后输出每组序列当中第一多和第二多的数的个数(每组数据输出结果后要换行再输出下一组数据的输出)。
时间: 2023-12-25 13:06:13 浏览: 47
C语言基础-C语言编程基础之Leetcode编程题解之第25题K个一组翻转链表.zip
以下是C语言代码实现,同样使用结构体数组来存储每组数据的信息,每输出一组数据的结果后添加一个换行符:
```
#include <stdio.h>
struct Data {
int n;
int nums[100];
int firstMaxCount;
int secondMaxCount;
};
int main() {
int t;
scanf("%d", &t);
struct Data data[t];
// 读入数据
for (int i = 0; i < t; i++) {
scanf("%d", &data[i].n);
for (int j = 0; j < data[i].n; j++) {
scanf("%d", &data[i].nums[j]);
}
}
// 计算第一多和第二多的数的个数
for (int i = 0; i < t; i++) {
int firstMax = 0, secondMax = 0;
for (int j = 0; j < data[i].n; j++) {
if (data[i].nums[j] > firstMax) {
secondMax = firstMax;
firstMax = data[i].nums[j];
} else if (data[i].nums[j] > secondMax && data[i].nums[j] < firstMax) {
secondMax = data[i].nums[j];
}
}
data[i].firstMaxCount = 0;
data[i].secondMaxCount = 0;
for (int j = 0; j < data[i].n; j++) {
if (data[i].nums[j] == firstMax) {
data[i].firstMaxCount++;
} else if (data[i].nums[j] == secondMax) {
data[i].secondMaxCount++;
}
}
}
// 输出结果
for (int i = 0; i < t; i++) {
printf("%d %d\n", data[i].firstMaxCount, data[i].secondMaxCount);
if (i != t - 1) {
printf("\n");
}
}
return 0;
}
```
阅读全文