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

C++向量问题修复:检测输入元素超限并查找中间元素

问题分析与解决方案

问题根源

你的代码存在两个核心缺陷,导致无法检测输入元素超过9个的情况:

  • 初始创建了固定大小为9的vector,循环最多仅执行9次,完全不会读取第10个及以后的输入,自然无法判断是否超量
  • 仅在遇到负数时才会调用resize,但如果输入超过9个正数,循环跑完9次就直接结束,不会处理后续输入,最终numInts.size()永远≤9,超量检测逻辑彻底失效

修正思路

要解决这个问题,需要调整输入处理逻辑:

  1. 动态读取输入,不再限制容器初始大小
  2. 每次读取元素时实时检查数量,一旦超过9个立即标记并停止有效读取
  3. 即使后续遇到负数,只要之前已读入超过9个元素,依然输出指定提示

修改后的代码

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

int main() {
    const int MAX_NUM = 9;
    vector<int> numInts;
    int value;
    bool tooMany = false;

    while (cin >> value) {
        if (value < 0) {
            break; // 负数为输入结束标志
        }
        // 检查当前元素数量是否已达上限
        if (numInts.size() >= MAX_NUM) {
            tooMany = true;
            // 继续读取直到负数,避免输入残留影响后续操作
            while (cin >> value && value >= 0);
            break;
        }
        numInts.push_back(value);
    }

    if (tooMany) {
        cout << "Too many numbers" << endl;
    } else {
        // 题目保证输入整数数量为奇数,无需处理偶数情况
        cout << "Middle item: " << numInts.at(numInts.size() / 2) << endl;
    }

    return 0;
}

代码说明

  • 初始创建空vector,通过push_back动态添加元素,摆脱固定大小的限制
  • 每次读取正数前先检查当前元素数量,若已达到9个则标记超量,并清空后续输入直到遇到负数
  • 最终根据tooMany标记决定输出内容,完全符合题目要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:01:02