题目描述
已知字符串s
由 m
个字符a
, n
个字符b
组成,求所有这样的s
中,字典序第 k
小的字符串是哪个? 其中1≤m,n≤30,1≤k≤Cmm+n
。
输入描述
输入三个数:m n k
,中间用空格分割
输出描述
输出对应的字符串
样例
输入 复制
2 2 4
输出 复制
baab
我的代码只是输出了aab
题目描述
已知字符串s
由 m
个字符a
, n
个字符b
组成,求所有这样的s
中,字典序第 k
小的字符串是哪个? 其中1≤m,n≤30,1≤k≤Cmm+n
。
输入描述
输入三个数:m n k
,中间用空格分割
输出描述
输出对应的字符串
样例
输入 复制
2 2 4
输出 复制
baab
我的代码只是输出了aab
【以下回答由 GPT 生成】
#include <iostream>
#include <string>
using namespace std;
int Count = 0; // 记录生成字符串的个数
void GenerateString(int m, int n, int k, string& result, string& current, char prevChar) {
if (m == 0 && n == 0) { // 如果已经生成完毕,则判断是不是第k个字符串
Count++;
if (Count == k) {
result = current;
}
return;
}
if (m > 0) { // 当还有a字符时,递归生成a字符
current += 'a';
GenerateString(m - 1, n, k, result, current, 'a');
current.pop_back(); // 回溯
}
if (n > 0 && prevChar != 'b') { // 当还有b字符时,递归生成b字符,但不能连续生成两个b字符
current += 'b';
GenerateString(m, n - 1, k, result, current, 'b');
current.pop_back(); // 回溯
}
}
int main() {
int m, n, k;
cin >> m >> n >> k;
string result = "";
string current = "";
char prevChar = '\0';
GenerateString(m, n, k, result, current, prevChar);
cout << result << endl;
return 0;
}