इस समस्या में, हमें दो पूर्णांक मान, n और m दिए गए हैं। हमारा कार्य बाइनरी प्रतिनिधित्व में n सेट और m अनसेट बिट्स वाली सबसे बड़ी संख्या ज्ञात करना है।
समस्या को समझने के लिए एक उदाहरण लेते हैं
इनपुट : n = 3, m = 1 आउटपुट : 14
व्याख्या −
सबसे बड़ी संख्या में 3 सेट बिट्स और फिर 1 अनसेट बिट होगा। (1110)2 = 14
समाधान दृष्टिकोण
समस्या का एक सरल समाधान (n+m) सेट बिट्स वाली संख्या ढूंढना है। इस संख्या से, अंत (LSB) से m बिट्स को टॉगल ऑफ करें। (n+m) सेट बिट्स वाली संख्या बनाने के लिए,
$$(1\ll(n+m))-1$$
फिर m बिट्स को टॉगल करें और संख्या लौटाएं।
उदाहरण
हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम
#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<<"सबसे बड़ी संख्या "<<n<<" सेट बिट्स और "<<m<<" अनसेट बिट्स के साथ है "<<findlargestNumber(n, m); return 0; } आउटपुट
सबसे बड़ी संख्या 5 सेट बिट्स और 2 अनसेट बिट्स के साथ है 124