在C++中输入的值中缺少元素
Missing element in values entered in C++
该代码接受整数n
并接受n-1
元素。输入的元素是从1
到n
的所有数字,只有一个除外。我们应该找到缺失的元素。
这个解决方案是最快的。但是,我不明白。
有人能解释一下吗
#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;
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- 如何通过 getter 函数删除矢量的元素?
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 从控制台中删除最后打印的元素
- 擦除while循环中迭代的元素