You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改C语言代码找出整数数组中全部最高频率元素?

问题分析与代码修正

你的代码存在三个核心问题导致无法输出所有高频元素:

  1. 计数器未逐次重置:counter变量在循环外初始化,导致每次迭代时会累加之前元素的计数,造成频率计算错误。
  2. 频率计算不准确:仅统计当前元素之后的重复次数,未包含元素本身,导致实际频率少算1次。
  3. 仅存储单个高频元素:用mostFreq单一变量存储结果,无法保留多个频率相同的元素。

以下是修正后的代码,采用结构体存储唯一元素及其频率的方式,清晰高效地输出所有高频元素:

#include <stdio.h>
#include <string.h>
#define n 6

// 定义结构体存储元素及其出现频率
typedef struct {
    int element;
    int count;
} ElementFreq;

int main() {
    int a[n] = {1,2,3,1,2,4};
    ElementFreq freq[n];
    int uniqueCount = 0;

    // 第一步:统计每个唯一元素的出现频率
    for (int i = 0; i < n; i++) {
        int isExist = 0;
        // 检查当前元素是否已被统计
        for (int j = 0; j < uniqueCount; j++) {
            if (freq[j].element == a[i]) {
                freq[j].count++;
                isExist = 1;
                break;
            }
        }
        // 未统计过则新增记录
        if (!isExist) {
            freq[uniqueCount].element = a[i];
            freq[uniqueCount].count = 1;
            uniqueCount++;
        }
    }

    // 第二步:找出最高频率值
    int maxFreq = 0;
    for (int j = 0; j < uniqueCount; j++) {
        if (freq[j].count > maxFreq) {
            maxFreq = freq[j].count;
        }
    }

    // 第三步:输出所有频率等于最高频率的元素
    printf("出现频率最高的元素是:");
    for (int j = 0; j < uniqueCount; j++) {
        if (freq[j].count == maxFreq) {
            printf("%d ", freq[j].element);
        }
    }
    printf("\n");

    return 0;
}

代码说明

  1. 结构体存储:用ElementFreq结构体记录每个唯一元素及其出现次数,避免重复统计。
  2. 三次遍历:第一次遍历统计所有元素的频率,第二次遍历找出最高频率,第三次遍历输出所有符合条件的元素。
  3. 去重处理:在统计阶段检查元素是否已存在,确保每个元素只被统计一次。

运行该代码后,输入数组{1,2,3,1,2,4}会输出出现频率最高的元素是:1 2 ,符合预期。

内容的提问来源于stack exchange,提问作者Luka Bitsadze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:01:08