使用 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 等)编写此程序。我们希望您觉得这篇文章有用。


相关文章