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

C প্রোগ্রামে একই সংখ্যক ১ ও ০ থাকা পরবর্তী বড় বাইনারি সংখ্যা বের করা


ভূমিকা

একটি বাইনারি স্ট্রিং দেওয়া থাকলে (যে কোনো সংখ্যা n-এর বাইনারি রিপ্রেজেন্টেশন), একই সংখ্যক ১ ও ০ ধারণকারী পরবর্তী বড় সংখ্যাটির বাইনারি রিপ্রেজেন্টেশন বের করতে হবে। এটি নেক্সট পারমিউটেশন (next permutation) লজিক দিয়ে সমাধান করা যায়।

উদাহরণ

ইনপুট: 1011 (ডেসিমেল ১১)
আউটপুট: 1101 (ডেসিমেল ১৩)

এলগরিদম

nextBin(bin)
শুরু
  len = bin.length
  i = len-2 থেকে ১ পর্যন্ত পিছিয়ে:
    যদি bin[i]=='0' এবং bin[i+1]=='1':
      swap(bin[i], bin[i+1]), ব্রেক
  যদি i == 0: "No greater number" রিটার্ন
  j = i+2, k = len-1
  যতক্ষণ j < k:
    যদি bin[j]=='1' এবং bin[k]=='0': swap, j++, k--
    অন্যথায় যদি bin[i]=='0': ব্রেক
    অন্যথায়: j++
  bin রিটার্ন করুন
শেষ

C++ প্রোগ্রাম উদাহরণ

#include 
using namespace std;

string nextBinary(string bin) {
    int len = bin.size(), i;
    for (i = len-2; i >= 1; i--) {
        if (bin[i]=='0' && bin[i+1]=='1') {
            swap(bin[i], bin[i+1]); break;
        }
    }
    if (i == 0) return "No greater number";
    int j = i+2, k = len-1;
    while (j < k) {
        if (bin[j]=='1' && bin[k]=='0') {
            swap(bin[j], bin[k]); j++; k--;
        } else if (bin[i]=='0') break;
        else j++;
    }
    return bin;
}

int main() {
    string bin = "1011";
    cout << "Next greater: " << nextBinary(bin);
    return 0;
}

আউটপুট

Next greater: 1101
  1. পাইথনে একই সেট বিট সংখ্যায় পরের বড় সংখ্যা বের করার প্রোগ্রাম

  2. পাইথনে x, y, z অক্ষরের নির্দিষ্ট সংখ্যা সম্বলিত সাবসিকোয়েন্স গণনা

  3. পাইথনে বাইনারি রিপ্রেজেন্টেশন প্যালিনড্রোম কিনা যাচাই করার প্রোগ্রাম

  4. পাইথনে দুটি সংখ্যার বাইনারি রিপ্রেজেন্টেশন অনুগ্রাম (anagram) কিনা যাচাই করা