编写C语言程序,实现任意输入10 个正整数,求其中互不相同的数的个数num,以及此num 个数中哪一个数的出现次数最多,共出现了几次。
时间: 2024-12-09 12:18:10 浏览: 84
要实现这个功能,你需要使用数组来存储这10个正整数,然后用哈希表(或字典)来跟踪每个数字及其出现次数。最后,遍历数组和哈希表找到出现次数最多的数字。
以下是一个简单的C语言程序实现:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_NUM 10
// 哈希表结构,用于存储数字和其出现次数
typedef struct {
int number;
int count;
} HashTableEntry;
// 比较两个哈希表项,用于排序
int compareHashTableEntries(const void *a, const void *b) {
HashTableEntry *entryA = (HashTableEntry *) a;
HashTableEntry *entryB = (HashTableEntry *) b;
return entryB->count - entryA->count;
}
int main() {
int numbers[MAX_NUM];
int numUnique = 0; // 互不相同的数的个数
int maxCount = 0; // 出现次数最多的次数
int mostFrequentNum = 0; // 出现次数最多的数字
bool isVisited[MAX_NUM] = {false}; // 标记已访问过的数字
// 输入10个正整数
for (int i = 0; i < MAX_NUM; i++) {
while (true) {
printf("Enter integer %d (0 to stop): ", i + 1);
scanf("%d", &numbers[i]);
if (numbers[i] == 0)
break;
if (numbers[i] < 0 || numbers[i] >= MAX_NUM) {
printf("Invalid input! Please enter a positive integer less than or equal to %d.\n", MAX_NUM);
continue;
}
if (!isVisited[numbers[i]]) {
numUnique++;
isVisited[numbers[i]] = true;
} else {
// 如果数字已经存在,更新最大计数
if (maxCount < numbers[i])
maxCount = numbers[i], mostFrequentNum = numbers[i];
}
}
}
// 对哈希表进行排序,找出出现次数最多的数字
HashTableEntry entries[MAX_NUM];
for (int i = 0; i < MAX_NUM; i++)
if (isVisited[i]) {
entries[numUnique - 1].number = i;
entries[numUnique - 1].count = __builtin_popcount(i); // 使用__builtin_popcount快速计算1的个数
numUnique--;
}
qsort(entries, numUnique, sizeof(HashTableEntry), compareHashTableEntries);
printf("Number of unique integers: %d\n", numUnique);
printf("Most frequent number and its frequency: %d appears %d times.\n", mostFrequentNum, maxCount);
return 0;
}
```
在这个程序中,我们首先输入10个正整数并检查它们是否有效。对于每个数字,我们在哈希表中增加其出现次数,并标记为已访问。同时,我们跟踪出现次数最多的数字。最后,我们使用`qsort`对哈希表进行排序,查找出现次数最多的数字。
阅读全文
相关推荐














