!{*(O^O)*}! 2025-06-15 18:54 采纳率: 88.5%
浏览 17

消失的数字 时间限制:C/C++ 1000MS 内存限制:C/C++ 256MB

消失的数字
时间限制:C/C++ 1000MS
内存限制:C/C++ 256MB

描述

Cody对数学非常的感兴趣,现在Cody遇到了这样一个问题,有一个数列a[n]它是由1~n中的数字构成的,由于某种神奇的魔法攻击,使得这个数列的数字缺少了一个,你能帮Cody写一个程序找到这个缺少的数字吗?

输入描述

输入有两行,第一行一个整数n,第二行有n−1个整数,表示数列中还有哪些数字,因为受到了魔法攻击,所以第二行的n−1个整数的顺序是随机的。

输出描述

输出一行,一个整数,表示缺失的那个数字是多少。

样例输入 1

3
1 2
样例输出 1

3
样例输入 2

5
1 5 4 2
样例输出 2

3
提示

【数据规模与约定】
对于50%的数据,满足1≤n≤10 ^ 3

对于100%的数据,满足1≤n≤10 ^ 6

  • 写回答

7条回答 默认 最新

  • 阿里嘎多学长 2025-06-15 18:54
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    消失的数字

    问题描述:Cody对数学非常感兴趣,现在Cody遇到了这样一个问题,有一个数列a[n]它是由1~n中的数字构成的,由于某种神秘原因,这个数列中某些数字消失了。现在Cody想知道哪些数字消失了。

    解决方案:使用 HashSet 或 unordered_set 来存储数列中的数字,然后遍历 1 到 n,检查每个数字是否在 HashSet 中,如果不在,则该数字消失了。

    C++ 代码:

    #include <iostream>
    #include <unordered_set>
    
    int main() {
        int n;
        std::cin >> n;
        std::unordered_set<int> numSet;
        for (int i = 1; i <= n; i++) {
            numSet.insert(i);
        }
        for (int i = 1; i <= n; i++) {
            if (numSet.find(i) == numSet.end()) {
                std::cout << i << " ";
            }
        }
        return 0;
    }
    

    代码解释:

    1. 读取输入 n,表示数列的长度。
    2. 使用 unordered_set 来存储数列中的数字。
    3. 遍历 1 到 n,检查每个数字是否在 HashSet 中,如果不在,则该数字消失了。
    4. 输出消失的数字。

    时间复杂度:O(n),空间复杂度:O(n)。

    评论

报告相同问题?

问题事件

  • 创建了问题 6月15日