इस समस्या में, हमें एक नंबर N दिया जाता है। हमारा काम एक प्रोग्राम बनाना है एक संख्या को 'ए' और 'बी' की स्ट्रिंग के रूप में लेक्सिकोग्राफिक क्रम में प्रिंट करना।
'ए' और 'बी' की स्ट्रिंग के रूप में सभी संख्याओं का प्रतिनिधित्व है
1 =ए
2 =बी
3 =एए
4 =एबी
5 =बीए
6 =बीबी
7 =एएए
8 =एएबी
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: एन =12
आउटपुट: बाब
समाधान दृष्टिकोण
'ए' और 'बी' की स्ट्रिंग एक बाइनरी नंबर के समान है। स्ट्रिंग को खोजने के लिए, हम पहले स्ट्रिंग की लंबाई ज्ञात करेंगे, इस तथ्य का उपयोग करते हुए कि लंबाई की 2 संख्याएं 1 (आकार 2 तक), लंबाई 2 की 4 संख्याएं (आकार 6 तक), लंबाई 3 की 8 संख्याएं (आकार तक) हैं। 14)। लंबाई खोजने के बाद हमें स्ट्रिंग के पात्रों को खोजने की जरूरत है। जैसे ही हम स्ट्रिंग में संख्याएँ जोड़ते हैं, शेष लंबाई को पुनरावृत्त रूप से अद्यतन करके। एन के साथ (2^(शेष लंबाई)) की तुलना के आधार पर चरित्र तय किया जाता है, यदि एन वर्तमान चरित्र से छोटा है तो 'बी' है अन्यथा इसका 'ए' है। प्रत्येक पुनरावृत्ति के बाद हम लंबाई को 1 से कम कर देंगे और यदि वर्ण 'बी' है तो एन को अपडेट कर देगा, और इसे संख्या से घटा देगा।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,
उदाहरण
#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