阿里笔试编程题第二题(优惠券使用)

Python代码:
mylist=[]
try:
    while True:
        i=[int(x) for x in raw_input().split()]
        mylist.append(i)
        if i == "":
            break
except:
    pass
num=mylist[1]
m=mylist[0][0]
def func(m,num):
    if sum(num)<2*m:
        return -1
    else:
        M=[]
        for i in range(len(num)):
            if sum(num[:i]+num[i+1:])>=2*m:
                M.append(num[i])
        if len(M)==0:
            return sum(num)
        else:
            num.remove(max(M))
            return func(m,num)
print '%.1f'%func(m,num)


#阿里巴巴##笔试题目##题解#
全部评论
修改后方便本地调试的Python3代码: m=int(input()) num=[int(x) for x in input().split()] def func(m,num):     if sum(num)<2*m:         return -1     else:         M=[]         for i in range(len(num)):             if sum(num[:i]+num[i+1:])>=2*m and len(num[:i]+num[i+1:])>2:                 M.append(num[i])             else:                 a=num[:i]+num[i+1:]                 if sum(num[:i]+num[i+1:])>=2*m and a[0]>=300 and a[1]>=300:                     M.append(num[i])         if len(M)==0:             return sum(num)         else:             num.remove(max(M))             return func(m,num) print('%.1f'%func(m,num))
点赞 回复 分享
发布于 2019-09-05 11:54
楼主你好,如何保证大于2*m的最小值,商品可以分成都不小于300的两拨呢? 比如,输入是200,299,303. 这段代码也是输出602.0,但其实并不能用得了这两张优惠券。
点赞 回复 分享
发布于 2019-09-04 17:30

相关推荐

Cherrycola01:0实习 0项目 约等于啥也没有啊 哥们儿这简历认真的吗
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客企业服务