C ++
 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

  1. C++の配列内のすべてのペアのXORの合計

    この問題では、n個の整数の配列arr[]が与えられます。私たちのタスクは、配列内のすべてのペアのXORの合計を見つけるプログラムを作成することです。 問題を理解するために例を見てみましょう Input: arr[] = {5, 1, 4} Output: 10 Explanation: the sum of all pairs: 5 ^ 1 = 4 1 ^ 4 = 5 5 ^ 4 = 1 sum = 4 + 5 + 1 = 10 この問題を解決する簡単な方法の1つは、ネストされたループを実行して、数値のすべてのペアを見つけることです。各ペアのXORを見つけて、合計に追加します。 アルゴリズム

  2. C++の配列内のすべての素数の積

    いくつかの要素を持つ整数配列arr[]が与えられた場合、タスクはその数のすべての素数の積を見つけることです。 素数は、1で割った数、またはその数自体です。または、素数は、1とその数自体を除いて他の数で割り切れない数です。 1、2、3、5、7、11など 与えられた配列の解を見つける必要があります- 入力 −arr [] ={11、20、31、4、5、6、70} 出力 − 1705 説明 −配列の素数は− 11、31、5であり、それらの積は1705 入力 − arr [] ={1、2、3、4、5、6、7} 出力 − 210 説明 −配列の素数は− 1、2、3、5、7