**《保留最大的数》

题目描述

给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。

输入描述:

输入为两行内容,第一行是正整数number,1 ≤ length(number) ≤ 50000。第二行是希望去掉的数字数量cnt 1 ≤ cnt < length(number)。

输出描述:

输出保留下来的结果。

示例1

输入

复制

325 1

输出

复制

35

python实现:

法一(只通过40%的样例):

if __name__ == '__main__':
    d = int(input())
    k = int(input())

    a = []
    while d:
        t = d % 10
        d = d / 10
        a.append(int(t))

    b = a[::-1]
    c = []
    f = 0
    kk = len(b) - k
    while kk:
        s = max(b[f : len(b) - kk + 1])
        t = b.index(s)
        b[t] = -1
        kk = kk - 1
        f = t + 1
        c.append(s)

    s = str(c[0])
    for i in range(1, len(c)):
        s = s + str(c[i])
    print s

法二:

思路:从左至右,比较两个数的大小,假如右边的数比左边的数小,则删掉该数,更新列表。假如到最后都没删掉指定个的数,则从前到后选取数即为答案,否则删完之后的列表即为答案。

if __name__ == '__main__':
    d = list(raw_input())
    k = int(input())

    t = len(d)
    i = 0
    
    while k > 0 and i < t - 1:
        if int(d[i]) >= int(d[i + 1]):
            i = i + 1
        else:
            d.pop(i)
            k = k - 1
            t = t - 1
            if i > 0:
                i = i - 1
            else:
                i = 0
    if k > 0:
        print ''.join(d[:-k])
    else:
        print ''.join(d)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT远征军

谢谢各位鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值