PTA L1-050 倒数第N个字符串 (15分)

题目描述:

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

输入格式:

输入在一行中给出两个正整数 L(2 ≤ L ≤ 6)和 N(≤10^{5}​​)。

输出格式:

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

输入样例:

3 7417

输出样例:

pat

解题报告:

1:其实就是一道进制转换的题目。先预处理26的n次方。

2: 倒数不好做, 转为正着数即 dic[l]-n,可以看代码。

3:接下来就是取模,除了。

4:最后倒序输出即可。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dic[10];
char ss[10];
int main(){
    ll l, n, x = 26, cnt = 0;
    scanf("%lld%lld", &l, &n);
    for(ll i=1; i<=6; ++i)
        dic[i] = x, x *= 26;
    n = dic[l]-n;
    while(l)
        ss[cnt++] = 'a'+n%26, n /= 26, l--;
    ll len = strlen(ss);
    for(ll i=len-1; i>=0; --i)
        printf("%c", ss[i]);
    printf("\n");
    return 0;
}
发布了143 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/jun_____/article/details/104061173