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

C++缺失数字查找程序无输出问题排查

问题分析与解决

题目翻译

给定整数n,以及n-1个互不相同的整数(均在1到n范围内),找出其中缺失的那个整数。

原代码问题点

  1. 输入读取逻辑错误:while (cin >> number)会持续读取输入直到流结束,导致输入完第二行的数字后,程序仍处于等待输入状态,无法执行后续的遍历判断代码,因此没有输出。
  2. 范围写死:vector<int> range = {1, 2, 3, 4, 5};是固定数组,仅当n=5时有效,无法适配其他输入值。

修复方案

方案一:布尔数组标记法

通过布尔数组记录出现过的数字,遍历1到n即可找到缺失值:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int n;
    cin >> n;

    vector<bool> present(n + 1, false);
    // 读取n-1个输入数字
    for (int i = 0; i < n - 1; ++i) {
        int num;
        cin >> num;
        present[num] = true;
    }

    // 查找未标记的数字
    for (int i = 1; i <= n; ++i) {
        if (!present[i]) {
            cout << i << endl;
            break;
        }
    }

    return 0;
}

方案二:求和法

利用1到n的总和减去输入数字的总和,差值即为缺失的数(避免双重循环,效率更高):

#include <iostream>

using namespace std;

int main() {
    int n;
    cin >> n;

    // 计算1到n的总和,用long long防止溢出
    long long total = (long long)n * (n + 1) / 2;
    long long input_sum = 0;

    for (int i = 0; i < n - 1; ++i) {
        int num;
        cin >> num;
        input_sum += num;
    }

    cout << total - input_sum << endl;

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:45:34