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

C++统计数组元素出现次数程序异常问题及修复求助

修复C++数组元素重复计数程序的问题

首先看你遇到的问题:你的程序想要统计数组中每个元素的出现次数,但输出重复显示了相同元素(比如两个5、两个2都各自输出了一次),而且计数结果不符合预期。咱们先拆解原程序里的问题,再给出修复方案。

原程序的核心问题

  • 循环条件错误:在检查当前元素是否已经在前面出现过的循环里,for(int k=0;k>i;k++)这个条件写反了,应该是k<i,否则这个循环根本不会执行,等于没做前面元素的重复检查。
  • 未跳过已统计元素:原程序会遍历数组的每一个元素并输出计数,哪怕这个元素已经被统计过,所以会出现重复的输出项。
  • 计数逻辑混乱:嵌套的多个循环里的判断逻辑绕了弯路,比如在else分支里的重置计数操作会干扰正确的统计结果。

修复方案1:修正原逻辑,实现去重统计

我们可以先检查当前元素是否已经被统计过,如果没统计过,再遍历整个数组计算它的出现次数,然后输出结果。这样就能避免重复输出,同时保证计数正确。

修复后的代码如下:

#include <iostream>
using namespace std;

int main() {
    int n;
    cout << "Enter Length of Elements= ";
    cin >> n;
    int arr[50];
    
    // 输入数组元素
    for(int i = 0; i < n; i++) {
        cout << "Enter Number=";
        cin >> arr[i];
    }

    // 统计并输出每个元素的出现次数(去重)
    for(int i = 0; i < n; i++) {
        // 先检查当前元素是否已经被统计过
        bool isCounted = false;
        for(int k = 0; k < i; k++) {
            if(arr[i] == arr[k]) {
                isCounted = true;
                break;
            }
        }
        if(isCounted) {
            continue; // 跳过已统计的元素
        }

        // 统计当前元素的出现次数
        int countNum = 0;
        for(int j = 0; j < n; j++) {
            if(arr[i] == arr[j]) {
                countNum++;
            }
        }

        cout << arr[i] << " has appeared " << countNum << " Times" << endl;
    }
    return 0;
}

修复方案2:更简洁的高效方法(使用哈希表)

如果想要更高效的统计(尤其是数组元素较多时),可以用C++的unordered_map来实现,代码更简洁,时间复杂度更低:

#include <iostream>
#include <unordered_map>
using namespace std;

int main() {
    int n;
    cout << "Enter Length of Elements= ";
    cin >> n;
    int arr[50];
    unordered_map<int, int> countMap;

    // 输入元素同时统计次数
    for(int i = 0; i < n; i++) {
        cout << "Enter Number=";
        cin >> arr[i];
        countMap[arr[i]]++;
    }

    // 遍历哈希表输出结果
    for(auto& pair : countMap) {
        cout << pair.first << " has appeared " << pair.second << " Times" << endl;
    }
    return 0;
}

测试你给出的数组{5,2,3,2,5},两个修复后的程序都会输出:

5 has appeared 2 Times
2 has appeared 2 Times
3 has appeared 1 Times

这样就完全符合你的预期了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:42:33