C++ 给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
时间: 2023-06-09 18:06:54 浏览: 127
最大公约数能同时被m和n整除的最大数。-C++程序教程
好的,我明白了。对于这个问题,我们可以使用哈希表进行统计每个数字出现的次数,然后找出出现次数最多的数,如果有多个出现次数相同的数,我们可以遍历哈希表找到最小的数。下面是对应的 C 代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d", &n);
int *nums = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", &nums[i]);
}
int *count = (int*)calloc(100001, sizeof(int));
int max_num = -1;
for (int i = 0; i < n; i++) {
count[nums[i]]++;
if (count[nums[i]] > count[max_num]) {
max_num = nums[i];
} else if (count[nums[i]] == count[max_num] && nums[i] < max_num) {
max_num = nums[i];
}
}
printf("%d\n", max_num);
free(nums);
free(count);
return 0;
}
```
注意,我们为了避免出现数组越界的情况,我们开辟了大小为 100001 的哈希表,其中下标代表数字,值代表出现的次数。同时,在使用 calloc 函数开辟空间时,我们将每个元素都初始化为 0。
阅读全文