本渣做这题的心路历程如下:
先标记第一个升序出现的点 比如34522 升序在第一个位置出现 就用一个变量i存了0这个位置
然后就开始遍历字符串 找位置 但是发现54323和54321的i都是4 所以就想用一个变量flag存一下 表示原字符串是否已经是非上升数
好 假设这些都做完了 该存都存了 然后把i前的字符照样输出 i处+1 i后全为0
比如 534533 输出就是540000
提交后结果WA了 开始反思找反例
就想到4223这个反例 一次上述操作后变成4230 但是这样得到的结果依旧不是非上升数
于是诞生了一个新思路:重复该操作直到符合为止
提交 AC 现附上代码
cas = int(input())
for t in range(cas):
s = input()
flag = 0
if len(s) != 1:
while flag == 0:
for i in range((len(s) - 1)):
if int(s[i]) < int(s[i+1]):
flag = 0
s = s[:i] + str(int(s[i])+1) + "0"*(len(s) - i - 1)
break
if i == len(s) - 2:
flag = 1
break
print("case #%d:\n%s" %(t, s))
改错尽管有时很累 =。= 但是只要洞悉到题目本质 往往很容易能找到解决方案
老哥稳