解题思路:
从后到前找到第一个可以增大位置,依次改变后面的位置
注意事项:

参考代码:

#include<iostream>
#include<string>
#include<vector> 
#include <algorithm>
using namespace std;
//因为是不断增加所以我们只需要右边界m和字符串,n和count不需要
string nextNum(string str,int m){
    string strs=str;
    int i=strs.size()-1;
    //从最后一个字符开始考虑
    for(;i>=0;i--){
        //如果最后一个字符等于可以使用的右边字符上限,就继续倒数第二个,直到不等
        //比如以题为列:bdfij,第一次循环j==j 继续第二次循环i==i 继续第三次f!=g 说明f至少可以变大一
        if((strs[i]-'a')+1!=m+(i-strs.size()+1))break;
    }
    //如果循环到i=0说明已经是最大情况如fghij不能再大了
    if(i==0)return "";
    //找到第一个可以变大的位置,把这个位置加1
    strs[i]=strs[i]+1;
    //后面的位置依据这个改变依次加1
    for(int j=i+1;j<strs.size();j++){
        strs[j]=strs[j-1]+1;
    }
    return strs;
}
int main()
{
    int n,m,count;
    char chars[28];
    cin>>n>>m>>count;
    string str;
    cin>>str;
    for(int i=0;i<5;i++){
        str=nextNum(str,m);
        if(str==""){
            break;
        }else{
            cout<<str<<endl;
        }
    }
   return 0;
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论