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