原题链接
题面
题意
每个字母代表一个数字,且这个数字的每一位需要是递增的(各不相同),然后给出第一个数,要求出接下来五个数字,要求是比上一个大的最小的数字,不足五个的则有几个输出几个。
思路
给数字的最后一位后面设定一个界限,即给定范围内的字母再+1,然后每次从最低位开始看,能变大就变大,且后面所有的字符都变成当前这个字母变大后+1递增的,这样可以使这个数字最小。
比如:bdfij,找到f可以+1变成g之后,当前数字就是bdgij,可是这样就不是最小的,使ij变成g+1递增的就是hi,那么正确的答案就是bdghi。
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
int main()
{
int l, r, len;
cin >> l >> r >> len;
string s; cin >> s;
int t = 5;
s[s.length()] = 'a' + r;//限定范围
while (t -- )//限定次数,最多五次
{
for (int i = s.length() - 1; i >= 0; i -- ) //从后往前找
{
if (s[i] + 1 < s[i + 1])//找到一个可以+的
{
s[i] ++;
for (int j = i + 1; j < s.length(); j ++ )//使它后面的变成+1递增的
{
s[j] = s[j - 1] + 1;
}
break;//退出
}
}
cout << s << endl;
}
return 0;
}
总结
难点在于读懂题目。