c语言 给定 n 个正整数,编写一个实验程序找出它们中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。
时间: 2024-12-06 21:25:20 浏览: 23
在C语言中,你可以使用哈希表(如数组或关联数组)来解决这个问题。这里是一个简单的解决方案:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 1000 // 根据实际情况调整最大数字数量
int find_most_common(int arr[], int n) {
int max_count = 0;
int most_common = -1; // 初始化最小最常见的数为负一
int hash[MAX_N] = {0}; // 创建一个大小为n的哈希表
for (int i = 0; i < n; i++) {
hash[arr[i]]++; // 每次遇到一个元素,计数加1
if (hash[arr[i]] > max_count) {
max_count = hash[arr[i]];
most_common = arr[i]; // 如果新值的计数大于之前的最大计数,则更新most_common
}
}
return most_common;
}
int main() {
int n;
printf("请输入正整数的数量: ");
scanf("%d", &n);
if (n <= 0 || n > MAX_N) {
printf("输入错误!\n");
return 1;
}
int* arr = malloc(n * sizeof(int)); // 动态分配内存
if (!arr) {
perror("Memory allocation failed");
return 1;
}
printf("请输入 %d 个正整数: ", n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
int most_frequent = find_most_common(arr, n);
if (most_frequent == -1) {
printf("没有找到出现次数最多的数。\n");
} else {
printf("出现次数最多且是最小的那个数是: %d\n", most_frequent);
}
free(arr); // 释放动态分配的内存
return 0;
}
```
在这个程序中,我们首先获取用户输入的正整数的数量和数值,然后遍历数组,统计每个数出现的次数,并保持当前出现次数最多的数及其出现次数。最后返回这个最常见的数,如果没有发现任何一个数是唯一的,则返回-1。
阅读全文