题目:有 n 个数字,值就是 1 ~ n ,发现丢失了 2 个数字,请你根据剩余的 n - 2 个数字,编程计算一下,缺失的是哪两个数字呢?
源代码:
#include <bits/stdc++.h>
using namespace std;
int n, a[100010];
int main() {
cin >> n;
for (int i = 1; i <= n - 2; i++) {
cin >> a[i];
}
sort(a + 1, a + n - 1);
for (int i = 1, j = 1; i <= n, j <= n; i++, j++) {
if (a[i] != a[i - 1] + 1) cout << j++ << " ";
}
}
只对了前两个测试点,上网搜了一下,没有找到合适的解答,先声明一下,本人没学过C++的类,希望用简洁一点的普通方法解答
// 输入:
// 5
// 2 4 3
// 数组:
// 0 | 2 | 3 | 4 | 0
// ^ ^
// 索引为 0 索引为 4
// 值为 1 值为 5
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int *array = new int[n]; // 动态分配内存
for (int i = 0; i < n; i++) array[i] = 0; // 初始化数组,将数组所有的元素初始化为 0
for (int i = 0; i < n - 2; i++)
{
int x;
cin >> x;
array[x - 1] = x; // 利用索引记录数字,比如 1 存储在索引 0,5 存储在索引 4
}
for (int i = 0; i < n; i++)
{
if (array[i] == 0) cout << i + 1 << " "; // 数组值为 0 的索引,加 1 就是缺失的数字
}
return 0;
}
【以下回答由 GPT 生成】
首先,感谢您提供了源代码和问题的详细描述。根据您的描述,我对代码进行了一些修改以满足您的需求。
在修改后的代码中,我使用了一个布尔数组found
来记录已经出现的数字。首先将found
数组初始化为false
,然后遍历输入的数字数组nums
,将已出现的数字在found
数组中标记为true
。接下来,我使用另一个数组missing
来存储缺失的数字。遍历found
数组,将对应位置为false
的数字(即缺失的数字)存入missing
数组中。
最后,我将返回缺失数字的数量,并在主函数中输出结果。如果缺失两个数字,我将遍历输入的数字数组,找到两个缺失的数字并输出。如果没有缺失数字或缺失数字超过两个,则输出相应的提示信息。
请您查看修改后的代码,是否符合您的需求。
【相关推荐】