您的位置:首页 > 其它

L1-050. 倒数第N个字符串

2018-04-04 20:15 246 查看


L1-050. 倒数第N个字符串

时间限制

400 ms

内存限制

65536 kB

代码长度限制

8000 B

判题程序

Standard

作者

陈越

给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, ..., aaz, aba, abb, ..., abz, ..., zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。

输入格式:

输入在一行中给出两个正整数 L(2 <= L <= 6)和 N(<= 105)。

输出格式:

在一行中输出对应序列倒数第 N 个字符串。题目保证这个字符串是存在的。
输入样例:
3 7417

输出样例:
pat


提交代码

题解:比赛的时候,有那个思路,但是不知道程序该怎么写,因为没想到用26进制的思路,其他都不好写,当然对我们这种菜鸟而言的。这道题的思路是用26进制思路来的,

比如a表示1,z为26,aa为27,az为52,依次位数递堆,就是26进制。

然后倒数不好处理,就转换成正数第几位,转换公式n=sun-n+1.(n是输入的倒数第几位,sum是l位最大的26进制数,比如lL为3的时候,zzz就是sum值的26进制数),转换成正数后,就对%26取余判断最后一位的字母,注意最后求出来的位数,不够L位,就自动加a。最后倒序输出。

#include<bits/stdc++.h>
using namespace std;
int main()
{
int l,n,sum;
string s;
cin>>l>>n;
sum=1;
for(int i=0;i<l;i++)
sum*=26;
n=sum-n+1;///讲倒数的第几位,变成顺数的第位置
n--; ///向前移动一位
while(n)
{
s+=n%26+'a';
n/=26;
}
while(s.size()<l)///位数不够时,补充到l位为止
s+='a';
reverse(s.begin(),s.end());
cout<<s<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: