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

如何修改C++数组代码,实现仅打印重复出现的元素一次?

实现仅输出数组中重复元素且每个仅打印一次

原代码存在两个问题:一是内层循环j <= ARRAY_SIZE会导致数组越界(数组下标范围是0到ARRAY_SIZE-1),二是找到重复元素就直接打印,导致同一个重复元素被多次输出。以下是两种符合需求的修改方案:

方案一:计数+标记法

通过计数数组统计元素出现次数,再用标记数组避免重复打印:

#include <iostream>
using namespace std;

int main()
{
    const int ARRAY_SIZE = 10;
    int value[ARRAY_SIZE] = { 1, 2, 3, 4, 3, 4, 2, 3, 5, 6};
    int count[100] = {0}; // 假设元素值范围在0-99之间,用于统计出现次数
    bool printed[100] = {false}; // 标记元素是否已打印

    // 统计每个元素的出现次数
    for (int i = 0; i < ARRAY_SIZE; i++)
    {
        count[value[i]]++;
    }

    // 遍历数组,输出符合条件的元素
    for (int i = 0; i < ARRAY_SIZE; i++)
    {
        if (count[value[i]] > 1 && !printed[value[i]])
        {
            cout << value[i] << " ";
            printed[value[i]] = true; // 标记为已打印,避免重复输出
        }
    }

    return 0;
}

方案二:直接检查重复+标记法

不需要额外计数,直接检查当前元素是否有重复,同时标记已打印的元素:

#include <iostream>
using namespace std;

int main()
{
    const int ARRAY_SIZE = 10;
    int value[ARRAY_SIZE] = { 1, 2, 3, 4, 3, 4, 2, 3, 5, 6};
    bool printed[100] = {false}; // 标记元素是否已打印

    for (int i = 0; i < ARRAY_SIZE; i++)
    {
        if (printed[value[i]]) // 已打印过的元素直接跳过
            continue;

        bool hasDuplicate = false;
        // 检查当前元素后面是否有重复项
        for (int j = i + 1; j < ARRAY_SIZE; j++)
        {
            if (value[i] == value[j])
            {
                hasDuplicate = true;
                break; // 找到重复即可停止检查
            }
        }

        if (hasDuplicate)
        {
            cout << value[i] << " ";
            printed[value[i]] = true;
        }
    }

    return 0;
}

两种方案都能输出2 3 4,解决了原代码的问题。如果元素值范围较大,可以改用std::unordered_map来计数和标记,不过对于简单场景,数组实现更直观高效。

内容的提问来源于stack exchange,提问作者Huy Trần

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:50:36