20027: 字符串问题
http://cs101.openjudge.cn/practice/20027
已知一个全是小写字母的字符串 a,现在想寻找一个与 a 长度相等的字符串 b,使得若按字典序排列,全是小写字母且长度与a相同的字符串恰好有 k 个排在 a 之后、b 之前。
输入
两行,第一行为字符串 a,第二行为正整数 k,数据保证此题有解
输出
要求的字符串b
样例输入
Sample1 Input:
a
1
Sample1 Output:
c样例输出
Sample2 Input:
aaz
10
Sample2 Output:
abk来源:cs101-2019 王楚惟
python
# 胡睿诚。用26进制数,比字符串好办
st = input()
l = len(st)
num = 0
for i in range(l):
num += (26**i)*(ord(st[l-1-i])-97)
num += int(input())+1
ans = ''
while num:
ans = chr(num%26+97)+ans
num //= 26
print('a'*(l-len(ans))+ans)下面给出一种 Python 解法,思路是将字符串看作 26 进制数字,然后令
python
def str_to_num(s):
"""将字符串s转换为对应的26进制数字(a->0, b->1, ...)"""
num = 0
for c in s:
num = num * 26 + (ord(c) - ord('a'))
return num
def num_to_str(num, length):
"""将数字num转换为固定长度length的26进制字符串"""
s = ['a'] * length
for i in range(length-1, -1, -1):
s[i] = chr((num % 26) + ord('a'))
num //= 26
return "".join(s)
if __name__ == '__main__':
a = input().strip()
k = int(input().strip())
num_a = str_to_num(a)
num_b = num_a + (k + 1) # a 与 b 之间正好有 k 个字符串
b = num_to_str(num_b, len(a))
print(b)python
l = list(input())
k = int(input())
for _ in range(k+1):
for j in range(len(l)-1, -1, -1):
if l[j] < 'z':
#l[j] += 1
l[j] = chr(ord(l[j])+1)
break
else:
l[j] = 'a'
#print('k={},l={}'.format(k,l))
print(''.join(l))