Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 가능한 모든 배열 쌍의 합계 XOR


이 문제에서는 n개의 요소 배열이 제공됩니다. 우리의 임무는 A의 모든 요소와 자기 자신의 쌍의 합인 크기 n*n의 시퀀스를 생성하는 것입니다. 그리고 형성된 이 합계 배열의 xor 요소를 인쇄합니다.

문제를 이해하기 위해 예를 들어 보겠습니다.

입력 - 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.

이 문제를 해결하려면 Xor의 몇 가지 속성을 알아야 합니다. 숫자가 같은 숫자의 첫 번째 XOR은 0입니다. 이제 새로 형성된 배열에는 동일한 요소를 취하는 여러 요소가 있습니다. 요소 a[i]+a[j] 그리고 a[j]+a[i]는 동일하므로 xor가 0이 됩니다. 따라서 2a[i] 요소만 남게 되므로 모든 a[i] 요소의 xor를 가져와 다음과 같이 곱합니다. 둘. 이것이 우리의 최종 답변이 될 것입니다.

예시

알고리즘 구현을 보여주는 프로그램

#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