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(≤105)。输出格式:在一行中输出对应序列倒数第 N 个字符串。题目保证这个字符串是存在的。输入样例:

给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 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

思路:题目的意思是给定一个长度为L的字母全为a的字符串然后从末位一直往前加+1,例如aaa,它的后一个字符串是aab,当它到aaz时再往前+1时z是最后一个字母那它让它的前一个字母+1,也就是变为aba(相当于进制转换的问题),然后假设字符串aaa到zzz之间有M个数,而题目要我们求倒数第N个字符串是啥?嘶!!!求倒数的?这玩意听着好像不好求呢。既然如此,那我们就转换成正序的来求,倒序是第N个,那正序的应该就是总数K-N咯。而总数K怎么求呢?因为前面说了这个递增的玩意就相当于进制转换,那么我们只需要求取进制的字符串的长度次方啦!也就是K=26^L

C++:
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m;     //n为小写字母字符串的长度,m为倒数的第m个字符串
    int b=26;
    cin>>n>>m;
    b=pow(b,n);   //计算由n个字符‘a’到n个字符‘z’共有多少个字符串
    m=b-m;        //总的个数b减去倒数个数m即为正序的第b-m
    char a[n];    //定义一个字符数组用来储存长度为n的字符串
    for(int i=0;i<n;i++)  //循环遍历
    {
        a[i]='a'+m%26; //每个字符是从字符‘a’开始,加上总数m除以26个字母的个数余下的数
        m/=26;          //总数再除以26
    }
    for(int i=n-1;i>=0;i--)  //逆序遍历输出,因为我们是从每个字符串的最后一个(从右往左)开始往上叠加,
        cout<<a[i];            //而我们输出的时候是要从左往右输出的
}
C语言:
  u#include<stdio.h>
#include<math.h>
int main()
{
    int n,m;     //n为小写字母字符串的长度,m为倒数的第m个字符串
    int b=26;
    scanf("%d %d",&n,&m);
    b=pow(b,n);   //计算由n个字符‘a’到n个字符‘z’共有多少个字符串
    m=b-m;        //总的个数b减去倒数个数m即为正序的第b-m
    char a[n];    //定义一个字符数组用来储存长度为n的字符串
    for(int i=0;i<n;i++)  //循环遍历
    {
        a[i]='a'+m%26; //每个字符是从字符‘a’开始,加上总数m除以26个字母的个数余下的数
        m/=26;          //总数再除以26
    }
    for(int i=n-1;i>=0;i--)  //逆序遍历输出,因为我们是从每个字符串的最后一个(从右往左)开始往上叠加,
        printf("%c",a[i]);            //而我们输出的时候是要从左往右输出的
}


相关文章
|
11月前
|
测试技术 C语言 C++
PTA团体程序设计天梯赛-练习集:L1-003 个位数统计
给定一个 k 位整数 N=dk−110k−1+⋯+d1101+d0 (0≤di≤9, i=0,⋯,k−1, dk−1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。 输入格式: 每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。 输出格式: 对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。
140 0
|
存储 算法 调度
【CCCC】PAT : 团体程序设计天梯赛-练习集 L2 答案,题解,附代码
【CCCC】PAT : 团体程序设计天梯赛-练习集 L2 答案,题解,附代码
354 0
【2022团体程序设计天梯赛】GPLT2022,L1~L2部分(PTA,L1-081~L1-088,L2-041~L2-044)题解代码
【2022团体程序设计天梯赛】GPLT2022,L1~L2部分(PTA,L1-081~L1-088,L2-041~L2-044)题解代码
425 0
|
人工智能
【CCCC】PAT : 团体程序设计天梯赛-练习集 L1 答案
【CCCC】PAT : 团体程序设计天梯赛-练习集 L1 答案
279 0
【CCCC】PAT : 团体程序设计天梯赛-练习集 L3 答案(01-23)
【CCCC】PAT : 团体程序设计天梯赛-练习集 L3 答案(01-23)
93 0
【2020团体程序设计天梯赛】L2部分(PTA,L2-033到L2-036)题解代码
【2020团体程序设计天梯赛】L2部分(PTA,L2-033到L2-036)题解代码
304 0
|
安全
【2021团体程序设计天梯赛】L2部分(PTA,L2-037到L2-040)题解代码
【2021团体程序设计天梯赛】L2部分(PTA,L2-037到L2-040)题解代码
253 0
|
机器人 C语言
【2021团体程序设计天梯赛】L1部分(PTA,L1-073到L1-080)题解代码
【2021团体程序设计天梯赛】L1部分(PTA,L1-073到L1-080)题解代码
276 0
【2020团体程序设计天梯赛】L1部分(PTA,L1-065到L1-072)题解代码
【2020团体程序设计天梯赛】L1部分(PTA,L1-065到L1-072)题解代码
207 0
PTA团体程序设计天梯赛-练习集 L3-020 至多删三个字符 (dp)
PTA团体程序设计天梯赛-练习集 L3-020 至多删三个字符 (dp)
116 0