请用c语言输入第一行一个正整数t,表示有t组数据,每一组第一行一个正整数n,表示序列长度为n,每一组第二行,输入n个正整数,序列长度最大不超过100,序列中的最大数不会超过100,最小不会小于1,然后输出序列当中第一多和第二多的数的个数。
时间: 2023-09-22 13:15:23 浏览: 176
以下是用 C 语言编写的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) {
return *(int *)b - *(int *)a;
}
int main() {
int t;
scanf("%d", &t);
while (t--) {
int n;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
qsort(arr, n, sizeof(int), cmp);
int max1 = arr[0], max2 = arr[0], count1 = 0, count2 = 0;
for (int i = 0; i < n; i++) {
if (arr[i] == max1) {
count1++;
} else if (arr[i] == max2) {
count2++;
} else if (count1 == 0) {
max1 = arr[i];
count1 = 1;
} else if (count2 == 0) {
max2 = arr[i];
count2 = 1;
} else {
count1--;
count2--;
}
}
count1 = 0, count2 = 0;
for (int i = 0; i < n; i++) {
if (arr[i] == max1) {
count1++;
} else if (arr[i] == max2) {
count2++;
}
}
printf("%d %d\n", count1, count2);
}
return 0;
}
```
这里使用了快速排序算法来对输入的数组进行排序,然后使用摩尔投票算法来求出出现次数最多的两个数。最后再遍历一遍数组,计算出这两个数的出现次数,并输出即可。
阅读全文