इस समस्या में, हमें n तत्वों की एक सरणी और एक पूर्णांक मान k दिया जाता है। हमारा काम सरणी के सभी तत्वों के XOR को खोजना है, जिन्होंने k के बराबर बिट्स सेट किए हैं।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट
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