इस समस्या में, हमें 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