c语言 (如3, 1, 4, 7, 2, 1, 1, 2, 2)中出现次数最多的数字及其对应的出现次数? 出现两个出现一样的数字怎么输出
时间: 2024-12-18 10:31:14 浏览: 10
在C语言中,要找出给定数组(如3, 1, 4, 7, 2, 1, 1, 2, 2)中出现次数最多的数字及其出现次数,可以使用哈希表(也称为关联数组)来存储每个元素及其计数。以下是步骤:
1. 定义一个结构体来存储数字和它的计数,例如 `struct CountItem`:
```c
typedef struct {
int number;
int count;
} CountItem;
```
2. 初始化一个空的哈希表(这里可以用动态数组,因为数据量较小):
```c
CountItem countItems[100]; // 假设最多有100种可能的数字
int numItems = 0; // 记录已填充项的数量
```
3. 遍历数组并更新计数:
```c
for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
int currentNum = array[i];
// 查找当前数字在哈希表中的位置,如果不存在则添加
for (int j = 0; j < numItems; j++) {
if (countItems[j].number == currentNum) {
countItems[j].count++;
break;
}
}
// 如果找到该位置,则更新;如果没找到,新插入
if (j == numItems) {
countItems[numItems].number = currentNum;
countItems[numItems].count = 1;
numItems++;
}
}
```
4. 找出出现次数最多的数字和其出现次数:
```c
CountItem maxItem = countItems[0]; // 假设第一个就是最大计数
for (int i = 1; i < numItems; i++) {
if (countItems[i].count > maxItem.count) {
maxItem = countItems[i];
}
}
printf("出现次数最多的数字是 %d,出现了 %d 次.\n", maxItem.number, maxItem.count);
```
5. 如果有两个及以上相同的数字出现次数最多,你可以稍微修改上面的代码,在遍历时记录下所有次数最多的数字,然后打印它们。
注意,这个方法假设数组中小于100的不同整数数目较少,如果数值范围很大,需要调整哈希表的大小。
阅读全文