学习Python从娃娃抓起!记录下蓝桥杯备考学习过程中的题目,记录每一个瞬间。
附上汇总贴:历年蓝桥杯Python青少组中/高级选拔赛(STEMA)真题解析 | 汇总
【题目描述】
最小下标
小蓝有一个由大写字母ABCDEF组成的字符串S,长度为n,字符串的下标依次为0到n-1。
小蓝按照如下方法生成一个无限长的字符串:
首先选定一个0到n-1之间的数,作为初始下标。
从初始下标开始,将下标对应的字符加入到字符串的结尾,将字符的序号(A到F依次对应1到6)与下标相加作为新的下标值,如果下标大于等于n,将其对n求余。重复此过程,即得到无限长的字符串。例如,对于字符串ACDF,当初始下标是0时,生成的字符串为:ACACACACAC…
再如,对于字符串DCBA,当初始下标是1时,生成的字符串为:CDDDDDDDDD…
给定小蓝的字符串S,请问当初始下标为多少时,生成的字符串最小。
【输入】
输入一行包含一个字符串。
【输出】
输出一行,包含一个整数,为所求的下标,如果有多个下标满足要求,输出最小的那个。
【输入样例】
DCBA
【输出样例】
3
【代码详解】
s = input()
l = len(s)
mins = 'Z'*l # 最小字符串,初始设为最大
ans = -1
def get(t): # 将字符的序号ord(s[t])-ord('A')+1,与下标t相加得到新的下标值
return (ord(s[t])-ord('A')+1+t)%l
for i in range(0, l): # 从初始下标开始遍历
s1 = s[i] # s1为空字符串,将下标对应的字符加到字符串的结尾
tmp = i # 记录下标
while len(s1)<l: # 因为是无限长度字符串,这里设定个l长度限制
j = get(tmp) # 获得新的下标
s1 += s[j] # 将新的下标的字符添加到字符串的结尾
tmp = j # 更新记录下标
if s1>mins: # 如果已经超过了mins,则不再继续
break
if s1<mins: # 对于小于mins的,更新mins,并记录mins对应的初始下标
mins = s1
ans = i
print(ans) # 打印下标
【运行结果】
ACDF
0