এই সমস্যায়, আমাদের দুটি পূর্ণসংখ্যার মান দেওয়া হয়েছে, 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) সেট বিট সমন্বিত সংখ্যা খুঁজে বের করা। এই নম্বর থেকে, শেষ থেকে m বিটগুলিকে টগল করুন (LSB)। (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<<"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