学习Python从娃娃抓起!记录下蓝桥杯备考学习过程中的题目,记录每一个瞬间。
附上汇总贴:历年蓝桥杯Python青少组中/高级选拔赛(STEMA)真题解析 | 汇总
【题目描述】
老师在黑板上写了一个不超过
500
500
500位的整数
n
(
1
≤
n
<
10500
)
n(1\le n\lt 10500)
n(1≤n<10500),要求同学们擦掉其中任意
k
k
k个数字,剩余数字的顺序不变,希望得到的数最大。
例如:
n
=
69134
n=69134
n=69134,
k
=
2
k=2
k=2,从
69134
69134
69134中擦掉
2
2
2个数字;从左往右,将第一个位置的
6
6
6和第三个位置的
1
1
1擦掉,变成的新数
934
934
934是最大的。
【输入】
输入两个整数
n
n
n和
k
(
1
≤
n
<
10500
,
0
≤
k
<
n
的位数)
k(1\le n\lt 10500,0\le k\lt n的位数)
k(1≤n<10500,0≤k<n的位数),整数之间以一个空格隔开
【输出】
输出一个整数,表示擦掉
k
k
k个数字后,得到的最大数
【输入样例】
69134 2
【输出样例】
934
【代码详解】
n, k = [int(i) for i in input().split()]
ls = list(str(n))
for i in range(k):
t = True # 用于判断字符串是否为从大到小排列
for j in range(1, len(ls)): # 遍历列表
if ls[j-1]<ls[j]: # 如果j-1小于j
ls.pop(j-1) # 则删除j-1
t = False # 置为False,表示不是从大到小排列
break # 停止循环,再做k-1次的遍历
if t: # 如果是从大到小排列,则删除最后一个字符
ls.pop()
print(''.join(ls))
【运行结果】
69134 2
934