拍卖(python解)

题目描述
公司最近新研发了一种产品,共生产了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

结果

问题:没有考虑到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解))