কম্পিউটার

C++ এ n সেট এবং m আনসেট বিট সহ বৃহত্তম সংখ্যাটি খুঁজুন


এই সমস্যায়, আমাদের দুটি পূর্ণসংখ্যার মান দেওয়া হয়েছে, 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

  1. C++ ব্যবহার করে একটি সেটে রিফ্লেক্সিভ রিলেশনের সংখ্যা খুঁজুন

  2. C++ এ n-এর নিকটতম এবং m দ্বারা বিভাজ্য সংখ্যাটি খুঁজুন

  3. C++ এ প্রদত্ত সংখ্যাগুলি দিয়ে তৈরি করা যেতে পারে এমন বৃহত্তম সংখ্যাটি খুঁজুন

  4. একটি সংখ্যার C++ এ একই সংখ্যক সেট এবং আনসেট বিট আছে কিনা তা পরীক্ষা করুন