C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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


この問題では、サイズnの配列arr[]が与えられます。私たちのタスクは、配列内のすべてのペアの合計のXORの合計を見つけるプログラムを作成することです。

問題を理解するための例を見てみましょう。

入力: arr [5、7、9]

出力: 22

説明:

(5 + 5)^(5 + 7)^(5 + 9)^(7 + 5)^(7 + 7)^(7 + 9)^(9 + 5)^(9 + 7) ^(9 + 9) =22

この問題の簡単な解決策は、ネストされたループを使用することです。そして、配列からすべての可能なペアを作成します。そして、各ペアの合計のXORを計算します。

アルゴリズム:

XorSumを初期化します =0

ステップ1: 0からnまで繰り返します。フォロー:

ステップ1.1: 0からnまで繰り返します。フォローする

ステップ1.1.1: XorSumを更新します つまり、 XorSum =XorSum ^(arr [i] + arr [j])。

ステップ2: 合計を返す

コードの動作を説明するプログラム

#include <iostream>
using namespace std;

int findSumXORPair(int arr[], int n) {

   int XorSum = 0;
   for (int i = 0; i < n; i++)
      for (int j = 0; j < n; j++)
       XorSum = XorSum^(arr[i]+arr[j]);
   return XorSum;
}

int main() {

   int arr[] = {5, 7, 9};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout<<"XOR of sum of all pairs in an array is "<<findSumXORPair(arr, n);
   return 0;
}

出力

XOR of sum of all pairs in an array is 22

このソリューションは、時間計算量がn 2 のオーダーであるため、効率的ではありません。 。

効率的な解決策は、XORのプロパティを使用することです。この問題を解決するために、配列のすべての要素のXORを計算してから、2を掛けます。

アルゴリズム:

XorSum=0を初期化します

ステップ1: 0からnまで繰り返します。

ステップ1.1: XorSumを更新します。つまり、XorSum =XorSum ^ arr [i]

ステップ2: 合計を2倍にして返します。

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;

int findSumXORPair(int arr[], int n) {

   int XorSum = 0;
   for (int i = 0; i < n; i++)
    XorSum = XorSum^arr[i];
   XorSum = 2*XorSum;
   return XorSum;
}

int main() {

int arr[] = {5, 7, 9};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout<<"XOR of sum of all pairs in an array is "<<findSumXORPair(arr, n);
   return 0;
}

出力

XOR of sum of all pairs in an array is 22

  1. C ++の配列のすべての要素にXOR演算を適用して、配列の合計を最小化する

    説明 サイズの配列が与えられた場合、N。Xと配列の各要素を使用してXOR演算を実行するときに、配列要素の合計が最小になるように要素Xを見つけます。 If input array is: arr [] = {8, 5, 7, 6, 9} then minimum sum will be 30 Binary representation of array elments are: 8 : 1000 5 : 0101 7 : 0111 6 : 0101 9 : 1001 If X = 5 then after performing XOR sum will be 30: 8 ^ 5 = 13 5

  2. C ++の合計配列パズル?

    ここでは、配列に関連する1つの興味深い問題を確認します。 n個の要素を持つ配列があります。 n個の要素の別の配列を作成する必要があります。ただし、2番目の配列のi番目の位置は、i番目の要素を除く最初の配列のすべての要素の合計を保持します。そして、1つの制約は、この問題では減算演算子を使用できないことです。 減算演算を使用できれば、すべての要素の合計を取得し、最初の配列のi番目の要素を減算して、2番目の配列のi番目の場所に格納することで、この問題を簡単に解決できます。 ここでは、毎回要素を追加することでこれを解決し、0..n-1のiについては、位置iの要素を無視します。ポイントを得るためのア