给定具有n个元素的序列,寻找该序列的众数(众素是指在序列中出现次数最大的元素),若输入序列中存在多个这样的数字输出其中任何一个即可。例如,输入为48 0 5 5 5 16 5 5 0时,输出结果为5。C语言
时间: 2024-02-22 16:57:18 浏览: 81
众数问题给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重
5星 · 资源好评率100%
可以使用哈希表来解决这个问题。具体做法是遍历序列,将每个元素作为键,其出现次数作为值存入哈希表中。遍历完后,找到值最大的键即为众数。
以下是C语言实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100000
int nums[MAXN];
int freq[MAXN];
int hash(int x) {
return (x % MAXN + MAXN) % MAXN;
}
int find_mode(int *nums, int n) {
int i, j, x, max_freq = 0, mode = 0;
for (i = 0; i < MAXN; i++) {
freq[i] = 0;
}
for (i = 0; i < n; i++) {
x = nums[i];
j = hash(x);
while (freq[j] > 0 && nums[j] != x) {
j = (j + 1) % MAXN;
}
nums[j] = x;
freq[j]++;
}
for (i = 0; i < MAXN; i++) {
if (freq[i] > max_freq) {
max_freq = freq[i];
mode = nums[i];
}
}
return mode;
}
int main() {
int n, i;
printf("请输入序列长度:");
scanf("%d", &n);
printf("请输入序列:");
for (i = 0; i < n; i++) {
scanf("%d", &nums[i]);
}
printf("众数为:%d\n", find_mode(nums, n));
return 0;
}
```
阅读全文