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

C++の範囲からのペアの最大XOR値


問題の説明

範囲[L、R]が与えられた場合、2つの整数のすべての可能な選択肢の中でXORが最大になるように、この範囲内の2つの整数を見つける必要があります

指定された範囲がL=1およびR=21の場合、-31は15および16のXORであり、範囲内で最大であるため、出力は31になります。

アルゴリズム

1. Calculate the (L^R) value
2. From most significant bit of this value add all 1s to get the final result

#include <bits/stdc++.h>
using namespace std;
int getMaxXOR(int L, int R){
   int LXR = L ^ R;
   int msbPos = 0;
   while (LXR) {
      msbPos++;
      LXR >>= 1;
   }
   int maxXOR = 0;
   int two = 1;
   while (msbPos--) {
      maxXOR += two;
      two <<= 1;
   }
   return maxXOR;
}
int main(){
   int L = 1;
   int R = 21;
   cout << "Result = " << getMaxXOR(L, R) << endl;
   return 0;
}
出力 上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

Result = 31

  1. C++の配列内のペアの最大ビット単位AND値

    問題の説明 n個の正の要素の配列が与えられます。配列から要素の任意のペアによって生成された最大ビット単位のAND値を見つける必要があります。 例 入力配列が{10、12、15、18}の場合、ビット単位のANDの最大値は12です。 アルゴリズム 単一ビットに対するビット単位のAND演算の結果は、両方のビットが1のときに最大になります。このプロパティを考慮すると- MSBから開始して、設定値を持つ配列の要素が2つ以上あるかどうかを確認します はいの場合、そのMSBはソリューションの一部になり、結果に追加されます。そうでない場合は、そのビットを破棄します 同様に、ビット位置をMSBからLS

  2. C++での最小XOR値ペア

    問題の説明 整数の配列が与えられます。最小のXOR値を持つ配列でペアを見つけます 例 If arr[] = {10, 20, 30, 40} then minimum value pair will be 20 and 30 as (20 ^ 30) = 10. (10 ^ 20) = 30 (10 ^ 30) = 20 (10 ^ 40) = 34 (20 ^ 30) = 10 (20 ^ 40) = 60 (30 ^ 40) = 54 アルゴリズム 指定された配列のすべてのペアを生成し、それらの値のXORを計算します 最小XOR値を返します 例 #include <bits/s