इस समस्या में, हमें दो संख्याओं के वैकल्पिक बिट्स का उपयोग करके एक संख्या उत्पन्न करने की आवश्यकता है। तो, इस समस्या में हम दूसरी संख्या से पहला बिट लेंगे, फिर पहली संख्या से दूसरा बिट, तीसरा बिट फिर से दूसरी संख्या से और चौथा पहली से और इसी तरह।
पहली से, तीसरा बिट फिर से दूसरी संख्या से और चौथा पहली से और इसी तरह।
आइए एक उदाहरण लेते हैं विषय को बेहतर ढंग से समझने के लिए,
इनपुट: n = 6 m = 10 आउटपुट: 2 व्याख्या: 6 का बिट प्रतिनिधित्व = 0110 10 का बिट प्रतिनिधित्व = 1010 0 1 1 0 ^ ^ 1 0 1 0 ^ ^ = 0 0 1 0 = 2
अब, इस उदाहरण के माध्यम से, बात स्पष्ट है कि कोड को हल करने के लिए हमें क्या करना है। मूल रूप से समाधान दूसरी संख्या के LSB से शुरू करके संख्याओं से वैकल्पिक बिट्स लेना है।
इस समस्या को हल करने का एक संभावित दृष्टिकोण पहली संख्या n के सेट सम बिट्स ढूंढना और फिर दूसरी संख्या m के सेट विषम बिट्स ढूंढना और दोनों का बिटवाइज OR वापस करना है।
एल्गोरिदम
चरण 1: n के लिए सेट सम बिट्स का मान ढूंढें। चरण 2: m के लिए सेट विषम बिट्स का मान ढूंढें। चरण 3: परिणाम = n के सेट सम बिट्स | m के सेट विषम बिट्स गणना करें। चरण 4: परिणाम का मान प्रिंट करें।
उदाहरण
#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