【发布时间】:2021-12-24 19:23:50
【问题描述】:
#include <iostream>
#include <algorithm>
using std::cin;
using std::cout;
using std::endl;
using std::sort;
int main()
{
int x = 0;
int n; // Enter Size of 2 array
cin >> n; // enter 5
long long *ptr1 = new long long[n - 1]; // size of array must be less than 5 by one n-1
for (int x = 0; x < n - 1; x++)
{
cin >> ptr1[x];
}
sort(ptr1, ptr1 + (n - 1));
for (int z = 1; z < n; z++)
{
if (z != ptr1[x])
{
cout << z;
break;
}
x++;
}
return 0;
}
你得到了 1,2,…,n 中的所有正整数,除了一个整数。找出缺失的整数。
输入 输入的第一行包含一个整数n(2≤n≤2×105)。
输入的第二行包含从 1 到 n(含)的 n−1 个不同整数。
输出 打印缺失的整数。 当我尝试汇总此代码时,我在测试 10 中出错了,但我不知道为什么!而且他没有显示测试,所以出了什么问题?
【问题讨论】:
-
你不需要存储所有的数字,或者排序任何东西,或者搜索任何东西。考虑从 1 到 n 的数字之和,并与输入中的数字之和进行比较。
-
你提到“测试10”,这个测试是什么?该特定测试的输入是什么?您是否尝试过使用调试器单步执行代码以查看该输入会发生什么?
-
您可以考虑this Q&A 以获得更好的算法方法(正如@molbdnilo 指出的那样)。
-
第二个循环不需要重新初始化
x。 -
旁注(请参阅@molbdnilo):从 1 到 n 的数字总和可以计算为
n * (n+1) / 2- 仅适用于您可能还不知道的情况...