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

C++求婚者淘汰问题代码编译通过但提交检测无输出,求排查修复

问题排查

核心错误点

  • 现有代码未计算下一轮待淘汰元素的索引:淘汰当前元素后,没有按规则向后数3位定位下一个淘汰目标,仅在eliminated越界时做了回卷,会直接导致数组访问越界崩溃或者死循环无输出。
  • 越界判断规则错误:vector的合法索引范围是0 ~ sizeSuitors - 1,判断条件应为eliminated >= sizeSuitors,而非eliminated > sizeSuitors。

逻辑修正思路

这是典型的步长为3的约瑟夫环问题,正确的索引更新规则如下:

  1. 淘汰索引为eliminated的元素后,下一轮计数的起点就是当前eliminated对应的位置(元素删除后后续元素整体前移1位,原eliminated + 1的元素已经移动到eliminated位置)
  2. 向后数3个得到下一个淘汰索引,等价于在当前eliminated的基础上加2(起点本身为第1个计数单位),再对当前队列长度取模实现自动回卷,无需单独写if判断处理越界。
修正后代码
int processSuitors(vector<int>& currentSuitors, list<int>& rekt)
{
    int sizeSuitors = currentSuitors.size();
    int eliminated = 2; // 第一轮淘汰索引2的元素,对应第3个求婚者
    
    while(sizeSuitors != 1)
    {
        rekt.push_back(currentSuitors[eliminated]);
        currentSuitors.erase(currentSuitors.begin() + eliminated);
        sizeSuitors--;
        if(sizeSuitors > 0)
        {
            eliminated = (eliminated + 2) % sizeSuitors;
        }
    }
    return currentSuitors[0];
}
优化说明
  • 用取模操作替代单独的越界判断,逻辑更简洁,避免边界判断错误问题
  • 完全符合题目限制:仅使用了题目允许的STL函数,未自行创建任何额外容器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:36:04