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