c语言:给出若干个正整数,请找出出现次数最多的数。 输入格式: 在一行中输入若干个数,以空格间隔(读入数的总个数不超过5000)。 输出格式: 输出出现次数最多的数(若答案不唯一,输出最小的那个)。
时间: 2024-09-25 18:13:22 浏览: 48
在C语言中,解决这个问题可以使用哈希表或者数组+计数的方式来实现。这里我们采用数组+计数的方式,因为数组的空间复杂度较低,适合处理不超过5000个数的情况。
首先,我们需要一个足够大的数组存储这些数字及其对应的出现次数,然后遍历输入的所有数字。对于每个数字,如果它已经在数组中,就增加它的计数;如果不在,就在数组中创建一个新的元素并设置计数为1。
遍历结束后,数组中的最大计数表示出现次数最多,对应的索引位置就是出现次数最多的数字。需要注意的是,如果存在多个数出现次数相同且都是最大值,我们要返回其中的最小值。
以下是伪代码:
```c
int* numbers; // 数组存放数字
int count[5001] = {0}; // 初始化计数数组
// 遍历输入的数字
for (int i = 0; i < num_of_numbers; i++) {
int current_num = input[i]; // 当前数字
if (current_num > 5000) break; // 大于5000则结束,假设输入合法
count[current_num]++;
}
// 找出最大计数和对应的数字
int max_count = 0;
int most_frequent = 0;
for (int i = 0; i <= 5000; i++) {
if (count[i] > max_count) {
max_count = count[i];
most_frequent = i;
}
}
// 输出结果
printf("出现次数最多的数(最小的那个): %d\n", most_frequent);
```
阅读全文