কম্পিউটার টিউটোরিয়াল

C++-এ বিট পুনর্বিন্যাস করে সংখ্যা সর্বাধিক করা

সমস্যা বিবরণ

একটি অনসাইনড নম্বর দেওয়া আছে, দেওয়া অনসাইনড নম্বরের বিটগুলো ব্যবহার করে সর্বোচ্চ সংখ্যা কত হতে পারে তা বের করুন।

যদি ইনপুট নম্বর হয় 8 তবে এর বাইনারি রিপ্রেজেন্টেশন হল:

00000000000000000000000000001000

সর্বোচ্চ করার জন্য MSB-কে ১ সেট করুন। তবে নম্বর হয় 2147483648 যেটার বাইনারি রিপ্রেজেন্টেশন হল:

10000000000000000000000000000000

অ্যালগরিদম

1. দেওয়া নম্বরের বাইনারি রিপ্রেজেন্টেশনে সেট বিটের সংখ্যা গণনা করুন। 
2. n সংখ্যক লিস্ট সিগনিফিক্যান্ট সেট বিট বিশিষ্ট একটি নম্বর খুঁজে বের করুন। 
3. নম্বরটি (32 - n) বিয়ে লেফট শিফট করুন।

উদাহরণ

#include <bits/stdc++.h> 
using namespace std; 
unsigned getMaxNumber(unsigned num) { 
    int n = __builtin_popcount(num); 
    if (n == 32) { 
        return num; 
    } 
    unsigned result = (1 << n) - 1; 
    return (result << (32 - n)); 
} 
int main() { 
    unsigned n = 8; 
    cout << "Maximum number = " << getMaxNumber(n) << endl; 
    return 0; 
}

আউটপুট

Maximum number = 2147483648
  1. C++-এ arr[i]*i এর যোগফল সর্বাধিক করা

  2. C++-এ p, q, r দৈর্ঘ্যের সেগমেন্ট সংখ্যা সর্বাধিক করা

  3. C++-এ অ্যারে-এর মেডিয়ান সর্বাধিক করা

  4. C++-এ k সেট বিটস সহ একটি নম্বরকে ম্যাক্সিমাইজ করতে ন্যূনতম ফ্লিপ বের করা