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

如何修复MINGW编译运行C++ Codeforces题时结果与在线IDE不一致的bug

问题根因

你遇到的不是MinGW的bug,是代码本身存在数组越界访问的未定义行为,不同运行环境下内存布局不同,才会出现结果不一致的情况。
你的数组arr长度为4,合法下标范围是0~3,但第二层循环i从0到3时,会访问arr[i+1]、arr[i+2]、arr[i+3]:

  • 当i=1时,i+3=4已经超出合法下标
  • 当i=2时,i+2=4、i+3=5超出范围
  • 当i=3时,i+1=4、i+2=5、i+3=6全部越界
    越界访问的内存值是不确定的,ideone运行时刚好越界读到的值不会触发错误的计数逻辑,MinGW运行时读到的值刚好匹配了判断条件,才会得到错误结果。

修复方案

方案1:修改原有逻辑的循环范围

你的原有逻辑是统计「存在后续重复值的元素个数」,只需要把第二层循环的终止条件改成i < 3,避免i=3时的越界访问即可:

using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);

    int arr[4];
    int ans = 0;
    for (int i = 0; i < 4; ++i)
    {
        cin >> arr[i];
    }

    // 只遍历前3个元素,判断后面有没有重复
    for (int i = 0; i < 3; ++i)
    {
        if (arr[i] == arr[i + 1] || arr[i] == arr[i + 2] || arr[i] == arr[i + 3]) {
            ans++;
        }

    }

    cout << ans;
}

方案2:用更稳妥的去重统计逻辑

可以用set自动去重的特性直接计算结果,完全避免越界问题,逻辑更清晰:

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

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);

    set<int> s;
    for (int i = 0; i < 4; ++i)
    {
        int x;
        cin >> x;
        s.insert(x);
    }
    cout << 4 - s.size();
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:54:02