इस समस्या में, हमें दो पूर्णांक मान, n और m दिए गए हैं। हमारा काम है n सेट और m अनसेट बिट्स के साथ सबसे बड़ी संख्या का पता लगाना संख्या के द्विआधारी प्रतिनिधित्व में।
समस्या को समझने के लिए एक उदाहरण लेते हैं
Input : n = 3, m = 1 Output : 14
स्पष्टीकरण -
Largest number will have 3 set bits and then 1 unset bit. (1110)2 = 14
समाधान दृष्टिकोण
समस्या का एक सरल समाधान है (n+m) सेट बिट्स वाली संख्या का पता लगाना। इस नंबर से, एम बिट्स को अंत (एलएसबी) से टॉगल करें। (n+m) सेट बिट्स के साथ एक संख्या बनाने के लिए,
$$(1\ll(n+m))-1$$
फिर एम बिट्स को टॉगल करें और नंबर वापस करें।
उदाहरण
हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम
#include <iostream> using namespace std; int findlargestNumber(int n, int m){ int maxNum = (1 << (n + m)) - 1; if (m == 0) return maxNum; int number = (1 << m) - 1; return (maxNum ^ number); } int main(){ int n = 5, m = 2; cout<<"The largest number with "<<n<<" set bits and "<<m<<" unset bits is "<<findlargestNumber(n, m); return 0; }
आउटपुट
The largest number with 5 set bits and 2 unset bits is 124