在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

以上是 在C ++中设置位等于K的数组所有元素的XOR 的全部内容, 来源链接: utcz.com/z/331205.html

回到顶部