给出若干个正整数,请找出出现次数最多的数。 输入格式: 在一行中输入若干个数,以空格间隔(读入数的总个数不超过5000)。 输出格式: 输出出现次数最多的数(若答案不唯一,输出最小的那个)。 用c语言编写
时间: 2024-09-18 07:05:50 浏览: 52
在 C 语言中,可以使用哈希表(如数组或动态分配的结构体)来解决这个问题。以下是基本的算法步骤:
1. 首先,声明一个大小足够的数组(例如最大值+1),并初始化所有元素为0。这个数组将存储每个数字出现的次数。
2. 然后,读取输入的每一个整数,对于每个数,检查其在数组中的位置,如果该位置的计数为0,则设置为1;如果已经存在,增加1。
3. 同时维护两个变量,一个是最常见的次数(初始化为0),另一个是最常出现的数(初始化为第一个读到的数)。
4. 遍历数组,每次遇到计数值大于当前最常见的次数时,更新这两个变量。
5. 最后遍历结束,数组中的最大值就是出现次数最多的数(如果有多个相同的最大值,选择最小的那个)。
下面是简单的 C 代码示例:
```c
#include <stdio.h>
int main() {
int n, num;
int count[10001] = {0}; // 假设输入的最大数不会超过10000
scanf("%d", &n);
while (n--) {
scanf("%d", &num);
count[num]++;
if (count[num] > count[max_common]) {
max_common = num;
common_count = count[num];
} else if (count[num] == count[max_common]) {
if (num < max_common) {
max_common = num;
}
}
}
printf("出现次数最多的数是:%d\n", max_common);
return 0;
}
```
请注意,此代码假设最多只有一个最常见的数,并没有处理可能出现多个最常见数的情况。如果需要考虑这种情况,你需要记录所有的最常见数,然后在最后输出它们。
阅读全文