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

学习Python从娃娃抓起!记录下蓝桥杯备考学习过程中的题目,记录每一个瞬间。
附上汇总贴:历年蓝桥杯Python青少组中/高级选拔赛(STEMA)真题解析 | 汇总


【题目描述】
老师在黑板上写了一个不超过 500 500 500位的整数 n ( 1 ≤ n < 10500 ) n(1\le n\lt 10500) n(1n<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(1n<10500,0k<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
  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值