C++中陣列每對元素之和的異或


在這個問題中,我們給定一個包含n個元素的陣列。我們的任務是生成一個大小為n*n的序列,其元素是A的所有元素對與其自身的和。並列印由此形成的和陣列的異或元素。

讓我們舉個例子來理解這個問題:

輸入 − A (1, 4, 5)

輸出 − 0

解釋

B (1+1, 1+4, 1+5, 4+1, 4+4, 4+5, 5+1, 5+4, 5+5)
B(2,5,6,5,8,9,6,9,10)
Xor of all values = 2^5^6^5^8^9^6^9^10 = 0.

為了解決這個問題,我們需要了解異或的一些性質。一個數字與自身的第一次異或結果為0。現在,在新生成的陣列中,有多個元素是相同的,元素a[i]+a[j]和a[j]+a[i]是相同的,因此它們的異或結果將為0。所以,我們只剩下2a[i]個元素,因此我們將取所有a[i]元素的異或,並將其乘以二。這將是我們的最終答案。

示例

程式演示了我們演算法的實現

 線上演示

#include <iostream>
using namespace std;
int findSumXor(int arr[], int n){
   int XOR = 0 ;
   for (int i = 0; i < n; i++) {
      XOR = XOR ^ arr[i];
   }
   return XOR * 2;
}
int main(){
   int arr[3] = { 2, 4, 7 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The xor of the sum pair of elements of the array is\t"<<findSumXor(arr, n);
   return 0;
}

輸出

The xor of the sum pair of elements of the array is 2

更新於: 2020年4月20日

188 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.