输入一些数值,求出现的次数最多的数。如果有多个并列,则从大到小输出。 c语言代码生成
时间: 2024-03-07 20:50:01 浏览: 77
二。Pascal-编译原理龙书
以下是基于哈希表实现的 C 语言代码,可以满足你的需求:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100000
#define MAX_M 1000000
int n, m;
int a[MAX_N];
int b[MAX_M];
int hash[MAX_M];
int maxCnt, maxNum;
int cmp(const void* a, const void* b) {
return *(int*)b - *(int*)a;
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
hash[a[i]]++;
}
for (int i = 0; i < MAX_M; i++) {
if (hash[i] > 0) {
b[m++] = i;
if (hash[i] > maxCnt) {
maxCnt = hash[i];
maxNum = i;
}
}
}
qsort(b, m, sizeof(int), cmp);
printf("%d\n", maxNum);
for (int i = 0; i < m; i++) {
if (hash[b[i]] == maxCnt && b[i] != maxNum) {
printf("%d\n", b[i]);
}
}
return 0;
}
```
代码思路:
1. 输入数字序列,同时使用哈希表记录每个数字出现的次数。
2. 遍历哈希表,将出现过的数字存入一个数组中,并找到出现次数最多的数字。
3. 对存储数字的数组进行从大到小的排序。
4. 输出出现次数最多的数字,然后输出其它出现次数相同的数字(排除出现次数最多的数字)。
阅读全文