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

C++에서 배열의 모든 삼중항 중 XOR의 최대값

<시간/>

이 문제에서는 정수 배열이 제공됩니다. 우리의 임무는 배열의 모든 삼중항 중에서 XOR의 최대값을 만드는 것입니다.

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

입력 - 배열 ={5, 6, 1, 2}

출력 − 6

설명 -

All triplets are:
5^6^1 = 2
5^6^2 = 1
5^1^2 = 6
6^1^2 = 5

이 문제를 해결하기 위해 가능한 모든 삼중항의 XOR을 찾고 모든 삼중항의 최대값을 인쇄하는 직접적인 접근 방식이 있습니다. 배열에 많은 수의 요소가 있는 배열로 작업하는 경우에는 효과적이지 않습니다.

최대 XOR을 찾기 위해 먼저 모든 요소 쌍의 XOR을 포함하는 집합을 만듭니다. 그런 다음 모든 쌍과 요소 사이의 XOR을 찾고 최대 XOR을 찾습니다.

예시

솔루션의 작동을 설명하는 프로그램,

#include <bits/stdc++.h>
using namespace std;
int MaxTripletXor(int n, int a[]){
   set<int> XORpair;
   for (int i = 0; i < n; i++) {
      for (int j = i; j < n; j++) {
         XORpair.insert(a[i] ^ a[j]);
      }
   }
   int maxXOR = 0;
   for (auto i : XORpair) {
      for (int j = 0; j < n; j++) {
         maxXOR = max(maxXOR, i ^ a[j]);
      }
   }
   return maxXOR;
}
int main(){
   int matrix[] = {1, 2, 3, 5, 7};
   int n = sizeof(matrix) / sizeof(matrix[0]);
   cout<<"The maximum XOR sum triplets is "<<MaxTripletXor(n, matrix);
   return 0;
}

출력

The maximum XOR sum triplets is 7