在C ++中按字典顺序将数字打印为字符串“ A”和“ B”
在这个问题中,给我们一个数字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”类似于二进制数。要找到字符串,我们首先要找到字符串的长度,这是使用2个长度为1的数字(耕种大小2),4个长度为2的数字(耕种大小6),8个长度为3的数字(耕种大小)14)。找到长度后,我们需要找到字符串的字符。通过迭代地更新剩余长度,当我们向字符串中添加数字时。如果N小于(2^(剩余长度)),则根据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