使用 C++ 查找 XOR 为零的唯一三元组的数量
c++server side programmingprogramming
在本文中,我们将讨论在给定的唯一数字数组中计算 XOR 为 0 的唯一三元组 (x、y、z) 的数量。因此,三元组应该是唯一的,其中所有三个元素都是唯一的,并且会计算三元组的所有组合,例如 −
输入:arr[ ] = { 5, 6, 7, 1, 3 } 输出:2 解释:三元组是 { 5, 6, 3 } 和 { 6, 7, 1 },其 XOR 为零。 输入:arr[ ] = { 3, 6, 8, 1, 5, 4 , 12} 输出:3 解释:三元组为 { 3, 6, 5 }、{ 1, 5, 4 } 和 { 4, 8, 12 },其异或结果为零。
寻找解决方案的方法
我们知道相同值的异或结果总是为零。因此,我们找到唯一的三元组,可以采用一种乐观的方法,即从数组中找到两个值的异或并存储结果,然后在数组中搜索等于结果的值。此外,结果的值不应等于成对的任何值。查找
示例
#include <bits/stdc++.h> using namespace std; int main () { int arr[] = { 3, 6, 8, 1, 5, 4, 12 }; int n = sizeof (arr) / sizeof (arr[0]); int result; // count 变量用于保持对的数量。 int count = 0; // 创建一个集合来存储唯一数字。 unordered_set < int >values; // 在集合中插入值。 for (int i = 0; i < n; i++) values.insert (arr[i]); // 遍历所有对以计算 XOR。 for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { // 查找 i、j 对的异或。 int XR = arr[i] ^ arr[j]; // 检查对的 XOR 值是否存在于数组中 // 并且值不应成对出现。 if (values.find (XR) != values.end () && XR != arr[i] && XR != arr[j]) count++; } } // 存储结果 result = count / 3; cout << "唯一三元组的数量:" << result; return 0; }
输出
唯一三元组的数量:3
上述代码的解释
- 创建一组 unordered_set < int >values; 来存储给定数组的唯一编号。
- 使用 for() 循环使用 values.insert (arr[i]) 将值插入到集合中。
- 使用两个嵌套循环遍历所有对并计算它们的 XOR 值。
- 然后,在数组中搜索 XOR 值,如果在数组中找到该值而不是在对中找到该值,则增加计数。
- 将结果存储为 count / 3 将计数三元组'三种组合,并且我们需要唯一的三元组。
结论
本文讨论了如何找到 XOR 值为 0 的三元组的数量;我们讨论了一种寻找唯一三元组的乐观方法。我们还讨论了解决这个问题的 C++ 程序。但是,我们可以用任何其他编程语言(如 Java、C、Python 等)编写此程序。我们希望您觉得这篇文章有用。