有 n 个数字值是 1 ~ n ,发现丢了 2 个数字,根据剩余的 n - 2 个数字,编程计算缺失的数字

题目:有 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数组中。

最后,我将返回缺失数字的数量,并在主函数中输出结果。如果缺失两个数字,我将遍历输入的数字数组,找到两个缺失的数字并输出。如果没有缺失数字或缺失数字超过两个,则输出相应的提示信息。

请您查看修改后的代码,是否符合您的需求。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^