用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’的字串類似於二進位制數。為了找到字串,我們將首先找到字串的長度,利用這樣一個事實:長度為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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP