历年蓝桥杯Python青少组中/高级选拔赛(STEMA)真题解析 | 2022年11月模拟赛编程题(10)

学习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
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值