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

C++でKに等しいセットビットを持つ配列のすべての要素のXOR


この問題では、n個の要素の配列と整数値kが与えられます。私たちのタスクは、kに等しいビットを設定した配列のすべての要素のXORを見つけることです。

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

入力

array = {2, 12, 44, 103, 17} , K =3

出力

44

この問題を解決するために、配列のすべての要素のセットビットをカウントし、それをkと比較します。設定されたビット数がkに等しい場合、それをベクトルにプッシュし、ベクトルのすべての要素のXORを見つけます。

設定されたビット数を見つけるには、__ builtin_popcount()を使用します。 これはC++の組み込み関数です。

ソリューションの実装を示すプログラム

#include <bits/stdc++.h>
using namespace std;
int XorKSetBits(int arr[], int n, int k){
   vector<int> kBitElments;
   for (int i = 0; i < n; i++) {
      if (__builtin_popcount(arr[i]) == k) {
         kBitElments.push_back(arr[i]);
      }
   }
   int result = kBitElments[0];
   for (int i = 1; i < kBitElments.size(); i++)
      result ^= kBitElments[i];
   return result;
}
int main(){
   int arr[] = { 2, 12, 44, 103, 17 };
   int n = sizeof(arr) / sizeof(arr[0]);
   int k = 3;
   cout<<"XOR of all element of the array with "<<k<<" set bits is : "<<XorKSetBits(arr, n, k);
   return 0;
}

出力

XOR of all element of the array with 3 set bits is : 44

  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 ++)?

    この問題では、配列内の要素の各ペアの要素間の絶対差を取得する方法を確認します。 n個の要素がある場合、結果の配列にはn-1個の要素が含まれます。要素が{8、5、4、3}であると仮定します。結果は|8-5|になります=3、次に| 5-4 | =1、| 4-3 |=1。 アルゴリズム pairDiff(arr、n) begin    res := an array to hold results    for i in range 0 to n-2, do       res[i] := |res[i] – res