使用 C++ 找出 XOR 为零的唯一三元组的数量
在本文中,我们将讨论计算给定的唯一数字数组中唯一三元组(x,y,z)的数量,其中它们的XOR为0。因此,三元组应该是唯一的,其中所有三个元素都是唯一的,并且会计算所有例如三胞胎的组合-
Input : arr[ ] = { 5, 6, 7, 1, 3 }
Output : 2
Explanation : triplets are { 5, 6, 3 } and { 6, 7, 1 } whose XOR is zero.
Input : arr[ ] = { 3, 6, 8, 1, 5, 4 , 12}
Output : 3
Explanation : Triplets are { 3, 6, 5 }, { 1, 5, 4 } and { 4, 8, 12 } whose XOR is zero.寻找解决方案的方法
我们知道相同值的异或总是为零。所以我们找到唯一的三元组,可以应用一种乐观的方法,即从数组中找到两个值的异或并存储结果,并在数组中搜索与结果相等的值。此外,结果的值不应成对等于任何值。寻找
示例
#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;
//计数变量以保持对的计数。
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>值;存储给定数组的唯一编号。
使用for()循环在使用values.insert(arr[i])的集合中插入值。
使用两个嵌套循环遍历所有对并计算它们的XOR值。
然后,搜索数组中的XOR值,如果该值是在数组中而不是成对找到的,则增加计数。
将结果存储为count/3将计算三元组的三个组合,我们需要唯一的三元组。
结论
这篇文章讨论了寻找XOR值为0的三元组的数量;我们讨论了一种寻找独特三胞胎的乐观方法。我们还讨论了C++程序来解决这个问题。但是,我们可以使用任何其他编程语言(如Java、C、Python等)编写此程序。我们希望本文对您有所帮助。