ভূমিকা
একটি বাইনারি স্ট্রিং দেওয়া থাকলে (যে কোনো সংখ্যা 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++ প্রোগ্রাম উদাহরণ
#includeusing 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