博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018年3月31日天梯赛L1-2
阅读量:5256 次
发布时间:2019-06-14

本文共 1076 字,大约阅读时间需要 3 分钟。

L1-2倒数第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

解题思路:

相信很多人在做蓝桥杯模拟题时做过一个26进制的字母问题,大部分人将此题转化为类似于26进制的进制问题。这里我的思路代码比较复杂,时间复杂度比较高,但是比较好理解,而且也没有超时(要是超时了我也用进制的办法。。)

题目给出 l 个字符,那么也就确定了这个字符串的最大值是“zzzzz...”( l 个“z”),而且是求倒数第n个字符串,那么我们就逐个字符串减一(利用ASCII码值)。为了方便计算,我们把字符串倒过来,即ss[0]是字符串最右的字符。利用循环将最低位的字符减“1”,如果减完为“a”,那么就借位减一,变为“ ‘z’+1 ”,因为下一次循环要执行减“1”变为“z”,此处改变其实是提前了。对于借位没什么好说的,利用while循环,如果借位是“a”,那么就变为“z”继续借位,否则当前位减“1”就好了。

代码如下:

#include 
#include
using namespace std;int main(){ int l,n; cin>>l>>n; char ss[6]; for(int i=0;i
=0;i--){ cout<
=0;i--){ printf("%c",ss[i]); }cout<
<
=0;i--){ printf("%c",ss[i]); } return 0;}

转载于:https://www.cnblogs.com/masart/p/8691275.html

你可能感兴趣的文章
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>
html标签的嵌套规则
查看>>
[Source] Machine Learning Gathering/Surveys
查看>>
HTML <select> 标签
查看>>
类加载机制
查看>>
tju 1782. The jackpot
查看>>
湖南多校对抗赛(2015.03.28) H SG Value
查看>>
hdu1255扫描线计算覆盖两次面积
查看>>
hdu1565 用搜索代替枚举找可能状态或者轮廓线解(较优),参考poj2411
查看>>
bzoj3224 splay板子
查看>>
程序存储问题
查看>>
Mac版OBS设置详解
查看>>
优雅地书写回调——Promise
查看>>
android主流开源库
查看>>
AX 2009 Grid控件下多选行
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>