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

বিটওয়াইজ AND দিয়ে 0 থেকে X পর্যন্ত রূপান্তরের সর্বোচ্চ ধাপ C++-এ

সমস্যা বিবরণ

একটি পূর্ণসংখ্যা X দেওয়া আছে। 0 থেকে X পর্যন্ত রূপান্তরের জন্য সর্বোচ্চ কত ধাপ লাগবে তা বের করতে হবে।

বৈধ রূপান্তর: একটি ধাপ গণনা হয় যখন A থেকে B-এ রূপান্তর হয়। শর্ত: A != B এবং A & B = A (এখানে & হলো বিটওয়াইজ AND)। ত есть 1 ধাপ হলো A থেকে B-এ রূপান্তর। 0 থেকে X পর্যন্ত সর্বোচ্চ ধাপ গণনা করতে হবে।

উদাহরণ

ইনপুট - X = 7

আউটপুট - 3

ব্যাখ্যা -

ধাপ ১: 0(00) থেকে 1(01), 0!=1 এবং 0&1=0, রূপান্তর 00=>01
ধাপ ২: 1(001) থেকে 3(011), 1!=3 এবং 1&3=1, রূপান্তর 001=>011
ধাপ ৩: 3(0011) থেকে 7(0111), 3!=7 এবং 3&7=3, রূপান্তর 0011=>0111

সমাধানের পদ্ধতি

X-এ সেট বিট (বিট যেগুলোর মান ১) সংখ্যা গণনা করলে 0 থেকে X পর্যন্ত সর্বোচ্চ রূপান্তর পাওয়া যায়। প্রতিটি সেট বিটের জন্য এক ধাপ করে রূপান্তর করলে সর্বোচ্চ ধাপ হয়। A থেকে B-এ রূপান্তরে A-র সেট বিটগুলো B-তে সেট থাকতে হবে, কিন্তু বিপরীত ضرুরী নয়। তাই ন্যূনতম রূপান্তর ১ হতে পারে (কারণ 0-তে কোনো সেট বিট নেই)।

C++ কোড উদাহরণ

#include <bits/stdc++.h> 
using namespace std; 

int maxtransformation(int x) { 
    int steps = 0; 
    // সেট বিট গণনা 
    while (x) { 
        steps += x & 1; 
        x >>= 1; 
    } 
    return steps; 
} 

int main() { 
    int x = 7; 
    cout << "The maximum number of steps to transform 0 to " << x << " with bitwise AND are " << maxtransformation(x); 
    return 0; 
}

আউটপুট

The maximum number of steps to transform 0 to 7 with bitwise AND are 3
  1. C++-এ অ্যারে থেকে যুগল তৈরি করে সর্বোচ্চ বিটওয়াইজ AND মান

  2. C++-এ স্কয়ার ম্যাট্রিক্সে সর্বোচ্চ ও ন্যূনতম মান

  3. C++-এ বিটওয়াইজ AND (Bitwise AND) কী?

  4. পাইথনে বিটওয়াইজ AND ও OR-র সর্বোচ্চ যোগফল দিয়ে সাবসিকোয়েন্স খুঁজে বের করা