C++缺失数字查找程序无输出问题排查
问题分析与解决
题目翻译
给定整数n,以及n-1个互不相同的整数(均在1到n范围内),找出其中缺失的那个整数。
原代码问题点
- 输入读取逻辑错误:
while (cin >> number)会持续读取输入直到流结束,导致输入完第二行的数字后,程序仍处于等待输入状态,无法执行后续的遍历判断代码,因此没有输出。 - 范围写死:
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
相关产品推荐
相关产品推荐

