题目要求
题目思路
- 计算每种月饼的均价,优先卖出均价最高的月饼
- 计算总价格,需要注意,当全部月饼都不够需求时,价格就是当前总价格
题目代码(python)
def mooncake(cakelist,need_cake): # 输入月饼信息列表,以及需要的月饼数量
sort_cake = sorted(cakelist,key = lambda item:item['Aver'],reverse = True) # 将月饼列表中的月饼按照'Aver'关键字对应的值降序排列
if sort_cake[0]['Save'] >= need_cake: # 如果均价最高的月饼的库存大于所需要的量
all_price = (need_cake/sort_cake[0]['Save']) * sort_cake[0]['Price'] # 用需要的/均价最低月饼的库存*均价
all_price_2 = format(all_price,'.2f') # 保留两位小数,所以用format转换,得到的是字符串形式
print(all_price_2)
elif sort_cake[0]['Save'] < need_cake: # 如果均价最低的月饼不足以提供所需的量
needcake2 = need_cake # 暂存所需量
sum_price = 0.0 # 初始总价格0
sum_save = 0.0 # 初始总库存0
for i in range(0,len(cakelist)): # 找到需要的月饼种数
sum_save += sort_cake[i]['Save'] # 总库存量为目前遍历到的所有月饼数
if sum_save>=need_cake: # 如果此时的月饼数大于所需要的
all_price = sum_price+(needcake2/sort_cake[i]['Save'])*sort_cake[i]['Price'] # 计算价格,是前面i-1种月饼总价,加上当前种类月饼所需要的数目的价格
all_price_2 = format(all_price,'.2f') # 同样记得转换为二进制
print(all_price_2)
return
else:
sum_price += sort_cake[i]['Price'] # 如果当前种类月饼数目没有达到所要求的值,就将总价格加上当前月饼的总价格
needcake2 -= sort_cake[i]['Save'] # 目前的所需月饼数=总月饼数-已包含的月饼数
if sum(s['Save'] for s in sort_cake) < need_cake: # 注意考虑该种情况,如果所有月饼库存加起来还达不到所需量,那么价格就是所有价格的和
print(format(sum(s['Price'] for s in sort_cake),'.2f'))
num_cake,need_cake = map(int,input().split()) # 输入月饼种类和所需要的月饼数目
str_save = str(input()) # 各种月饼的库存
save_cake = str_save.split() # 以空格为间隔放入列表当中
str_price = str(input()) # 各种月饼的总价格
price_cake = str_price.split() # 以空格为间隔放入列表当中
cakelist = [] # 存放所有月饼信息的列表
for i in range(0,num_cake):
savei = float(save_cake[i]) # 将月饼库存均转换为浮点型
pricei = float(price_cake[i]) # 将月饼价格转化为浮点型
averi = float(pricei/savei) # 计算平均值
cake_dic = {"Save":savei,"Price":pricei,"Aver":averi} # 组成一个该种类月饼的字典
cakelist.append(cake_dic) # 将字典加入列表当中
mooncake(cakelist,need_cake) # 调用上面的函数