给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。C++语言
时间: 2023-06-09 09:06:48 浏览: 162
输入若干个整数,统计出现次数最多的那个整数。如果出现最多的整数有两个以上,打印最早输入的那个整数。
实现。
答:可以通过哈希表(hash table)的方式来解决。首先申请一个桶(bucket)数组,桶的下标为给定的正整数,桶的值为该正整数出现的次数。遍历一遍给定的n个正整数,对于每个出现的数字,将其对应的桶的值加1。最后再次遍历桶数组,找出最大值并记录对应的下标,即为出现次数最多的数。如果出现次数最多的数有多个,比较桶的下标即可得到最小的一个。
以下是C语言实现代码:
```c
#include <stdio.h>
#define MAX_N 10000 // 最多n个正整数
int main() {
int n, x, max_occurence = 0, min_num = 0;
int bucket[MAX_N] = {0}; // 桶数组
// 输入n个正整数
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &x);
bucket[x]++; // 对应桶计数器加1
if (bucket[x] > max_occurence) { // 记录最大出现次数与对应数字
max_occurence = bucket[x];
min_num = x;
} else if (bucket[x] == max_occurence && x < min_num) {
min_num = x;
}
}
printf("%d\n", min_num); // 输出结果
return 0;
}
```
阅读全文