ahxoss 2023-10-14 08:35 采纳率: 55.6%
浏览 32

已知字符串s 由 m 个字符a , n 个字符b 组成,求所有这样的s 中,字典序第 k 小的字符串是哪个?

题目描述
已知字符串s
由 m
个字符a
, n
个字符b
组成,求所有这样的s
中,字典序第 k
小的字符串是哪个? 其中1≤m,n≤30,1≤k≤Cmm+n

输入描述
输入三个数:m n k
,中间用空格分割

输出描述
输出对应的字符串

样例
输入 复制
2 2 4
输出 复制
baab

我的代码只是输出了aab

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-14 10:37
    关注

    【以下回答由 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;
    }
    

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月14日

悬赏问题

  • ¥15 远程访问linux主机超时
  • ¥15 odoo17存货管理优势于中国国内该行业传统ERP或MES的详细解读和举例
  • ¥15 CPU卡指令整合指令数据都在图片上
  • ¥15 火车票关联12306问题
  • ¥15 odoo17处理受托加工产品
  • ¥15 如何用MATLAB编码图三的积分
  • ¥15 圆孔衍射光强随孔径变化
  • ¥15 MacBook pro m3max上用vscode运行c语言没有反应
  • ¥15 ESP-PROG配置错误,ALL ONES
  • ¥15 结构功能耦合指标计算