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

C++统计数组元素重复次数时无法识别大于12数值的问题

问题原因
  • 核心bug在统计重复项的遍历逻辑:原代码用for (int i = 0; i <= n; i++)生成待统计的目标值,本质是只检查0到数组长度n之间的整数。本次测试用例数组长度n=12,循环最大只会校验到数值12,数组中值为13的元素根本不在遍历范围内,自然无法统计它的重复次数。
  • 该逻辑本身存在设计缺陷:默认数组内的元素值一定不超过数组长度,只要元素值大于n就会漏统计,和数组是否排序没有任何关系。
  • 附带的小问题:循环条件写i <= n本身存在边界风险,另外你写的双层循环排序是降序逻辑,不过你也提到排序不影响统计结果,这个问题不会触发计数异常。
修复方法

不要用数组下标值作为待统计的目标,改为遍历数组内实际存在的元素,增加已统计标记避免同一个数值重复输出即可。
修复后的可运行代码:

#include <iostream>
using namespace std;

int Count(int r[], int n, int x) {
    int res = 0;
    for (int i = 0; i <n; i++)
        if (x == r[i])
            res++;
    return res;
}

int main() {
    int count = 0;
    int r[12] = { 1, 1, 2, 3, 4, 5, 6, 6, 7, 8,13,13  };
    int n = sizeof(r) / sizeof(r[0]); 

    // 排序逻辑可保留,不影响最终统计结果
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++) {
            if (r[i] > r[j])
            {
                swap(r[i], r[j]);
            }
        }
    }

    // 标记数组,记录对应数值是否已经完成统计,避免重复输出相同数值的统计结果
    bool visited[1000] = {false};
    for (int i = 0; i < n; i++) {
        int curVal = r[i];
        if (visited[curVal]) {
            continue;
        }
        int repeatNum = Count(r, n, curVal);
        if (repeatNum >= 2) {
            count++;
            cout << "number" << curVal << "-" << repeatNum << " Recurrences" << endl;
        }
        visited[curVal] = true;
    }
    cout << "count is " << count;

    return 0;
}

修复后程序会正确识别所有数值(包括大于12的13)的重复次数,运行输出为:

number1-2 Recurrences
number6-2 Recurrences
number13-2 Recurrences
count is 3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:54:25