在C++中输入的值中缺少元素

Missing element in values entered in C++

本文关键字:元素 C++ 输入      更新时间:2023-10-16

该代码接受整数n并接受n-1元素。输入的元素是从1n的所有数字,只有一个除外。我们应该找到缺失的元素。

这个解决方案是最快的。但是,我不明白。
有人能解释一下吗

#include <iostream>
int main(){
    int g,n,i,k;
    std::cin>>n;
    for(i=1; i<n; i++){
        std::cin>>g;
        k^=i^g;
    }
    std::cout<<(k^n);
}

输入:

10
3 8 10 1 7 9 6 5 2

输出:

4

这使用了XOR是交换和结合的(所以顺序无关紧要),并且x^x == 0适用于所有x

它对1和n之间的所有数字进行XOR运算,并将其与所有输入数字进行异或运算。输入的任何数字都将在最终结果中进行两次异或运算,因此将被取消。剩下的唯一数字将是未输入的数字。这个数字只进行了一次异或运算,因此这将是所有异或运算的结果值。

对于您给出的示例:输入的数字是:3 8 10 1 7 9 6 5 2

1^2^3^4^5^6^7^8^9^10 ^ 3^8^10^1^7^9^6^5^2 = 
(1^1)^(2^2)^(3^3)^4^(5^5)^(6^6)^(7^7)^(8^8)^(9^9)^(10^10) =
4

请注意,代码的编写有些混乱,因为XOR的顺序并不简单:它在对输入进行XOR和对1到n之间的下一个数字进行XOR之间交替。这样做只是为了使代码简短。更清楚的是:

k = 0;
for (i=1; i<=n; i++)
    k ^= i;
for (i=0; i<n-1; i++) {
    std::cin >> g;
    k ^= g;
}
std::cout << k;