美文网首页
拍卖(python解)

拍卖(python解)

作者: nnnnxcj | 来源:发表于2019-04-15 10:12 被阅读0次

    题目描述
    公司最近新研发了一种产品,共生产了n件。有m个客户想购买此产品,第i个客户出价Vi元。为了确保公平,公司决定要以一个固定的价格出售产品。每一个出价不低于要价的客户将会得到产品,余下的将会被拒绝购买。请你找出能让公司利润最大化的售价。

    语言选择的是python3.6

    • 第一次尝试:
    # 思路:依次遍历p,计算列表中比p大的值的和,输出另和最大的p
    l1= raw_input().split()
    n, m =[int(i) for i in l1]
    l2= raw_input().split()
    clist=[int(i) for i in l2]
    clist=clist[0:m]
    
    def comp(a, p):
        if a >= p:
            return 1
        else:
            return 0
    
    i = 0
    biggest = 0
    maxi = 0
    p=0
    while i < m:
        p=clist[i]
        if biggest <= sum([p*comp(j,p) for j in clist]):
            maxi = i
            biggest = sum([p*comp(j,p) for j in clist])
        i = i + 1
    print clist[maxi]
    
    结果

    问题:序列没必要遍历m次,可以对序列排个序

    • 第二次尝试:
    # 思路:降序排列列表,和为p*(m-i),输出和最大的p
    l1= input().split()
    n, m =[int(i) for i in l1]
    l2= input().split()
    clist=[int(i) for i in l2]
    clist.sort(reverse=True)
    i = n
    prof = 0
    p=0
    q=0
    while i > 0:
        p=clist[i]
        prof=p*(m-i)
        if prof<clist[i+1]*(m-i-1) :
            prof=clist[i+1]*(m-i-1)
            q=clist[i+1]
        elif prof == clist[i+1]*(m-i-1):
            q = clist[i]
        i = i - 1
    print(q)
    
    结果

    问题:没有考虑到n比m小的情况,第一次也没考虑到

    • 最终:
    l1= raw_input().split()
    n, m =[int(i) for i in l1]
    l2= raw_input().split()
    clist=[int(i) for i in l2]
    n=min(n,m)
    clist.sort(reverse=True)
    prof = [(i+1)*clist[i] for i in range(0,n)]
    idx=clist[prof.index(max(prof))]
    print(idx)
    
    结果

    ps:望看到的朋友们给些意见,共同进步!刷题之路,道阻且长,出现这些问题的我可太菜了。。。。

    相关文章

      网友评论

          本文标题:拍卖(python解)

          本文链接:https://www.haomeiwen.com/subject/aadywqtx.html