使用 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 等)编写此程序。我们希望本文对您有所帮助。
以上是 使用 C++ 找出 XOR 为零的唯一三元组的数量 的全部内容, 来源链接: utcz.com/z/361993.html