首頁 >後端開發 >C++ >使用C++找到XOR為零的獨特三元組的數量

使用C++找到XOR為零的獨特三元組的數量

王林
王林轉載
2023-09-08 18:09:051124瀏覽

使用C++找到XOR為零的獨特三元組的數量

在本文中,我們將討論在給定的唯一數字數組中計算唯一三元組(x,y,z)的數量,其中它們的異或為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;
   // count variable to keep count of pairs.
   int count = 0;
   // creating a set to store unique numbers .
   unordered_set < int >values;
   // inserting values in set.
   for (int i = 0; i < n; i++)
      values.insert (arr[i]);


   // traverse for all pairs to calculate XOR.
   for (int i = 0; i < n - 1; i++) {
      for (int j = i + 1; j < n; j++) { // finding xor of i, j pair.
         int XR = arr[i] ^ arr[j];

         // checking if XOR value of pair present in array
         // and value should not be in pairs.
         if (values.find (XR) != values.end () && XR != arr[i] &&
            XR != arr[j])
            count++;
      }

   }
   // storing result
   result = count / 3;
   cout << "Number of unique triplets : " << result;
   return 0;
}

輸出

Number of unique triplets : 3

上述程式碼的解釋

  • 建立一個unordered_set values來儲存給定陣列中的唯一數字。
  • 使用for()迴圈透過values.insert(arr[i])將值插入集合中。
  • 使用兩個巢狀循環遍歷所有的數對,並計算它們的異或值。
  • 然後,在陣列中搜尋異或值,並在值在陣列中而不在數對中時增加計數。
  • 將結果儲存為count / 3,這樣就可以計算出三個組合的三元組數,而我們需要的是唯一的三元組。

結論

本文討論瞭如何找到具有異或值為0的三元組的數量;我們討論了一種樂觀的方法來找到唯一的三元組。我們也討論了用C 解決這個問題的程序。然而,我們可以用其他程式語言如Java、C、Python等來寫這個程式。希望本文對您有幫助。

以上是使用C++找到XOR為零的獨特三元組的數量的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除