(1)找众数(出现次数最多的数)(数字范围是[0, 100]) 如: 输入:5 1 2 1 2 1 输出:1 如: 输入:8 3 2 3 2 3 4 2 1 输出:2(众数有两个,输出最小的)C语言代码
时间: 2023-07-16 21:15:02 浏览: 66
以下是使用C语言实现找众数的代码:
```c
#include <stdio.h>
#define MAX_NUM 100
int main() {
int n, num[MAX_NUM + 1] = {0}, mode = 0, max_freq = 0;
// 读入 n 和数字序列
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
int x;
scanf("%d", &x);
num[x]++;
}
// 找到众数
for (int i = 0; i <= MAX_NUM; ++i) {
if (num[i] > max_freq) {
mode = i;
max_freq = num[i];
}
}
printf("%d\n", mode);
return 0;
}
```
该程序使用一个 `num` 数组来记录每个数字出现的次数,然后遍历该数组找到最大的出现次数,即为众数。注意,题目中要求输出最小的众数,因此在找到众数时需要记录下最大出现次数对应的数字,以便后面再次遍历 `num` 数组时,找到最小的众数。
相关问题
C语言实现找众数(出现次数最多的数)(数字范围是[0, 100]) 如: 输入:5 1 2 1 2 1 输出:1
以下是一种简单的实现方式:
```c
#include <stdio.h>
#include <stdlib.h>
#define NUM_RANGE 101 // 数字范围是[0, 100]
int main() {
int n;
scanf("%d", &n);
int *nums = (int *) malloc(n * sizeof(int));
int *counts = (int *) calloc(NUM_RANGE, sizeof(int));
// 统计每个数字出现的次数
for (int i = 0; i < n; i++) {
scanf("%d", &nums[i]);
counts[nums[i]]++;
}
// 找到出现次数最多的数字
int max_count = 0;
int mode = 0;
for (int i = 0; i < NUM_RANGE; i++) {
if (counts[i] > max_count) {
max_count = counts[i];
mode = i;
}
}
printf("%d\n", mode);
free(nums);
free(counts);
return 0;
}
```
首先,我们通过 `scanf` 读入数字的个数 `n`,然后动态分配两个数组 `nums` 和 `counts`,其中 `nums` 存储输入的数字,`counts` 存储每个数字出现的次数。
接下来,我们遍历 `nums` 数组,统计每个数字出现的次数,具体做法是将 `counts[nums[i]]` 加 1。
最后,我们遍历 `counts` 数组,找到出现次数最多的数字,并输出该数字。如果有多个数字出现次数相同,则输出其中任意一个数字即可。
注意,由于数字范围是 [0, 100],因此需要将 `counts` 数组的大小设置为 101,而不是 100。
(1)找众数(出现次数最多的数)(数字范围是[0, 100]) 如: 输入:5 1 2 1 2 1 输出:1 如: 输入:8 3 2 3 2 3 4 2 1 输出:2(众数有两个,输出最小的)
可以使用哈希表(字典)来实现,遍历输入的数字序列,将每个数字出现的次数记录在哈希表中,最后再遍历哈希表,找到出现次数最多的数字即可。
以下是Python代码实现:
```python
n = int(input())
nums = list(map(int, input().split()))
# 统计数字出现次数
count = {}
for num in nums:
if num not in count:
count[num] = 0
count[num] += 1
# 找出出现次数最多的数字
max_count = 0
mode = 0
for num in range(101):
if num in count and count[num] > max_count:
max_count = count[num]
mode = num
print(mode)
```
时间复杂度为O(n),空间复杂度为O(1)(哈希表最多只会有100个元素)。
阅读全文