इस समस्या में, हमें दो संख्याओं के वैकल्पिक बिट्स का उपयोग करके एक संख्या उत्पन्न करने की आवश्यकता होती है . तो, इस समस्या में हम दूसरे नंबर से पहले बिट का उपयोग करेंगे, फिर पहले से दूसरे बिट का, दूसरे नंबर से तीसरा बिट फिर से और पहले से आगे और इसी तरह।
पहले से, तीसरा बिट फिर से दूसरे नंबर से और आगे पहले से और इसी तरह।
विषय को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं,
Input : n = 6 m = 10 Output : 2 Explanation : Bits representation of 6 = 0110 Bit representation of 10 = 1010 0 1 1 0 ^ ^ 1 0 1 0 ^ ^ = 0 0 1 0 = 2
अब, इस उदाहरण के माध्यम से, बात स्पष्ट है कि कोड को हल करने के लिए हमें क्या करने की आवश्यकता है। मूल रूप से समाधान दूसरे नंबर के एलएसबी से शुरू होने वाली संख्याओं से वैकल्पिक बिट्स लेना है।
इस समस्या को हल करने के लिए एक संभव तरीका यह है कि पहले नंबर के सेट सम बिट्स खोजें n और फिर दूसरे नंबर m . के सेट ऑड बिट खोजें और बिटवाइज OR . लौटाएं दोनों में से।
एल्गोरिदम
Step 1 : For n find the value of set even bits. Step 2 : For m find the value of set odd bits. Step 3 : Calculate the result = set even bits of n | set odd bits of m. Step 4: Print the value of result.
उदाहरण
#include <iostream> using namespace std; int setevenbits(int n) ; int setoddbits(int m) ; int main(){ int n = 12; int m = 17; int setn = setevenbits(n); int setm = setoddbits(m); int result = ( setn | setm ); cout<<result; return 0; } int setevenbits(int n){ int temp = n; int count = 0; int res = 0; for (temp = n; temp > 0; temp >>= 1) { if (count % 2 == 1) res |= (1 << count); count++; } return (n & res); } int setoddbits(int m){ int count = 0; int res = 0; for (int temp = m; temp > 0; temp >>= 1) { if (count % 2 == 0) res |= (1 << count); count++; } return (m & res); }
आउटपुट
25