前言: {\color{Blue}前言:} 前言:
- 本系列题使用的是,“PTA中的团体程序设计天梯赛——练习集”的题库,难度有L1、L2、L3三个等级,分别对应团体程序设计天梯赛的三个难度。
- 更新取决于题目的难度,和学校的事情,但尽可能保证每日更新,若没更新次日补上。
- 这道题跟上一道题相比,那就简单很多了,主要就一个思路转化
- 我的方法可能不是最简单的,如有什么好的建议,欢迎各位CSDN的朋友告诉我
题目
给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, …, aaz, aba, abb, …, abz, …, zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。
输入格式
输入在一行中给出两个正整数
L
(
2
≤
L
≤
6
)
L(2 ≤ L ≤ 6)
L(2≤L≤6)和
N
(
≤
1
0
5
)
N(≤10 ^5)
N(≤105)。
输出格式:
在一行中输出对应序列倒数第 N 个字符串。题目保证这个字符串是存在的。
输入样例:文章来源:https://www.toymoban.com/news/detail-691254.html
3 7417
输出样例:文章来源地址https://www.toymoban.com/news/detail-691254.html
pat
题解
- 这道题的大致思路就是:
-
- 先把倒数转为正数
-
- 再把正数转为26进制
-
- 最后将数字转化成字母
L, N = map(int, input().split()) # 输入 L 和 N
total_strings = 26 ** L # 序列中总的字符串个数,每个位置都有26种选择
# 计算倒数第 N 个字符串对应的序号
index = total_strings - N
# 将序号转换为 L 进制数,即 L 个位置上的字符对应的索引
digits = []
for _ in range(L):
index, remainder = divmod(index, 26)
"""
divmod(index, 26) 是一个内置函数 divmod() 的调用,它用于同时执行除法和取余运算。
divmod(a, b) 将返回一个包含两个值的元组 (q, r),其中 q 是 a 除以 b 的商,r 是 a 除以 b 的余数。
换句话说,divmod(a, b) 等效于 (a // b, a % b)。"""
digits.append(remainder)
# 根据索引构造字符串
result = ''.join(chr(ord('a') + digit) for digit in digits[::-1])
"""
digits[::-1] 是对 digits 列表进行逆序操作,即将列表中的元素反向排列。
这是因为我们之前从右到左获取了每个位置上的字符索引,而构造字符串时需要从左到右的顺序。
chr(ord('a') + digit) 将每个索引值 digit 加上 'a' 的 ASCII 值,然
后将结果转换为对应的字符。这是为了将索引值转换为相应的小写字母。
(chr(ord('a') + digit) for digit in digits[::-1]) 是一个生成器表达式,用于生成一个由字符组成的迭代器。
迭代器中的每个元素是根据索引值计算得到的字符。
''.join(...) 将生成器表达式生成的字符迭代器连接成一个字符串。
通过空字符串 '' 的连接符,将字符依次拼接起来形成最终的字符串结果。
将最终的字符串结果赋值给变量 result。"""
print(result)
到了这里,关于L1-050 倒数第N个字符串(Python实现) 测试点全过的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!