এই সমস্যায় আমাদের একটি সংখ্যা N দেওয়া আছে। আমাদের কাজ সংখ্যাকে 'A' এবং 'B' স্ট্রিংয়ে লেক্সিকোগ্রাফিক্যাল অর্ডারে রূপান্তর করা।
সব সংখ্যার 'A' এবং 'B' স্ট্রিং রিপ্রেজেন্টেশন হলো:
1 = A
2 = B
3 = AA
4 = AB
5 = BA
6 = BB
7 = AAA
8 = AAB
উদাহরণ:
ইনপুট: N = 12
আউটপুট: BAB
সমাধানের পদ্ধতি
'A' এবং 'B' স্ট্রিংটি বাইনারি সংখ্যার অনুরূপ। স্ট্রিং খুঁজে বের করতে, আমরা প্রথমে স্ট্রিংর দৈর্ঘ্য বের করব, โดย 이용해 Факт যে দৈর্ঘ্য ১-র ২টি সংখ্যা আছে (সাইজ ২ পর্যন্ত), দৈর্ঘ্য ২-র ৪টি সংখ্যা (সাইজ ৬ পর্যন্ত), দৈর্ঘ্য ৩-র ৮টি সংখ্যা (সাইজ ১৪ পর্যন্ত)। দৈর্ঘ্য পাওয়ার পর আমাদের স্ট্রিংর ক্যারেক্টারগুলো বের করতে হবে। বাকি দৈর্ঘ্য আপডেট করে যেসব ক্যারেক্টার স্ট্রিংয়ে যোগ করছি। ক্যারেক্টারটি নির্ণয় করা হয় N কে (2^(বাকি দৈর্ঘ্য)) দিয়ে তুলনা করে, যদি N ছোট হয় তবে ক্যারেক্টার 'B' অন্যথায় 'A'। প্রতিটি ইটারেশনে দৈর্ঘ্য ১ কমাবো এবং যদি ক্যারেক্টার 'B' হয় তবে N আপডেট করব এবং num দিয়ে কমিয়ে দিব।
আমাদের সমাধান দেখানোর প্রোগ্রাম
উদাহরণ
#include <iostream> #include<math.h> using namespace std; int findStringLength(int M) { int stringLen = 1; while((pow(2, stringLen + 1) - 2) < M) { stringLen++; } return stringLen; } void printNumString(int N) { int stringLen, num, stringNumber; stringLen = findStringLength(N); stringNumber = N - (pow(2, stringLen) - 2); while (stringLen) { num = pow(2, stringLen - 1); if (num < stringNumber) { cout<<"B"; stringNumber -= num; } else { cout<<"A"; } stringLen--; } } int main() { int N = 47; cout<<"The number as sting of 'A' and 'B' in lexicographic order is "; printNumString(N); return 0; }আউটপুট
The number as sting of 'A' and 'B' in lexicographic order is BAAAA