কম্পিউটার

C++ এ সর্বোচ্চ মান পেতে একটি বাইনারি নম্বর থেকে এক বিট সরান


একটি সমস্যা আলোচনা করুন যেখানে আমাদের একটি বাইনারি নম্বর দেওয়া হয়েছে। আমাদের এটি থেকে কিছুটা সরাতে হবে যাতে অবশিষ্ট সংখ্যাটি অন্যান্য সমস্ত বিকল্পের সর্বাধিক হওয়া উচিত, উদাহরণস্বরূপ

Input : N = 1011
Output: 111
Explanation: We need to remove one bit so removing 0 bit will give a maximum number than removing any 1’s bit. 111 > 101, 011.

Input: 111
Output: 11
Explanation: Since all the bits are 1 so we can remove any bit.

সমাধান খোঁজার পদ্ধতি

ব্রুট-ফোর্স পদ্ধতি

ব্রুট ফোর্স প্রয়োগ করলে সর্বাধিক ফলাফলের সংখ্যা পাওয়া যাবে, যেমন, প্রতিটি বিটকে একে একে সরিয়ে, বিভিন্ন ফলাফলের তুলনা করে এবং সর্বোচ্চ ফলাফল পাওয়া যাবে।

কিন্তু একটি দক্ষ পদ্ধতি আছে যে এটি ব্যবহার করতে পারে, অর্থাৎ, যদি আমরা ন্যূনতম অপ্রয়োজনীয় বিট সরিয়ে ফেলি।

দক্ষ পদ্ধতি

দক্ষ পন্থা ফলাফলের সংখ্যার উপর অন্তত প্রভাব ফেলবে।

  • প্রথমে, ডান দিক থেকে বিটগুলি অতিক্রম করুন৷

  • 0 এর জন্য অনুসন্ধান করুন এবং এটিকে প্রথম কাউন্টারে সরিয়ে দিন।

  • যদি 0 না পাওয়া যায়, তাহলে যেকোনো বিট সরিয়ে ফেলুন।

উদাহরণ

দক্ষ পদ্ধতির জন্য C++ কোড

#include <bits/stdc++.h>
using namespace std;
int main(){
    string str = "1011";
    bool flag = false;
    int n = str.length();
    // Initialising new array for
    char res[n - 1];
    int j = 0;
    // traversing through the binary number from right.
    for (int i = 0; j < n - 1; i++) {
        // if 0 is found then skip it.
        if (str[i] == '0' && flag == false) {
            flag = true;
            continue;
        }
        else
            res[j++] = str[i];
    }
    // printing the resulting string.
    cout << "Maximum number: " << res;
    return 0;
}

আউটপুট

Maximum number: 111

উপরের কোডের ব্যাখ্যা

  • একটি পতাকা পরিবর্তনশীল ব্যবহার করা হয় যাতে শুধুমাত্র একটি 0 বাদ দেওয়া হয়।

  • অক্ষর অ্যারে রেসটি ফলাফলের সংখ্যা সংরক্ষণ করতে আরম্ভ করা হয়।

  • লুপ n-1 পর্যন্ত চলবে কারণ আমাদের মূল সংখ্যার থেকে একটি কম উপাদান সংরক্ষণ করতে হবে।

উপসংহার

এই টিউটোরিয়ালে, আমরা এটি থেকে এক বিট মুছে ফেলার পরে সর্বাধিক সংখ্যা খুঁজে বের করার বিষয়ে আলোচনা করেছি। আমরা এই সমস্যা সমাধানের জন্য দুটি পন্থা নিয়ে আলোচনা করেছি৷

আমরা এর জন্য C++ কোডও লিখি, যা আমরা C, Java, Python, ইত্যাদির মতো অন্য যেকোনো ভাষায় লিখতে পারি। আমরা আশা করি এই টিউটোরিয়ালটি আপনার কাজে লাগবে।


  1. C++ এ একটি পরিসর থেকে একটি জোড়ার সর্বোচ্চ XOR মান

  2. C++ এ একটি সংখ্যায় k ব্রেকপয়েন্ট রাখার পর সর্বোচ্চ সেগমেন্টের মান

  3. C++ এ একটি বাইনারি স্ট্রিং থেকে সাবস্ট্রিং 010 অপসারণের ন্যূনতম পদক্ষেপ

  4. C++ এ একটি সংখ্যার সবচেয়ে উল্লেখযোগ্য সেট বিট খুঁজুন