陷阱一、需考虑需求大于库存的情况
陷阱二、需要将库存和售价变为float型,题目只说了种类和需求量是整数,测试点有可能将库存和售价设置为小数
n,d = map(int,input().split())
s = list(float(i) for i in input().split()) # 商品库存列表
r = list(float(i) for i in input().split()) # 商品售价列表
p = []
for i in range(n):
rs = r[i]/s[i]
p.append(rs) # 商品单价列表
rem = d # 剩余需求
r_sum = 0 # 总收入
while 1:
p_index = p.index(max(p)) # 最大单价的索引值
if rem-s[p_index] <= 0: # 剩余需求小于某商品库存,最后一轮
r_sum += p[p_index]*rem
break
else:
rem -= s[p_index] # 剩余需求大于某商品库存,新的剩余需求=剩余需求-某商品库存
r_sum += r[p_index] # 新的总收入= 总收入+商品售价
s.remove(s[p_index]) # 移除该轮最大单价的索引值对应的商品库存
r.remove(r[p_index]) # 移除该轮最大单价的索引值对应的商品售价
p.remove(p[p_index]) # 移除该轮最大单价的索引值对应的商品单价
if len(p) == 0: # 需求大于库存跳出循环
break
print("%.2f"%r_sum)
有两个测试点有非零返回,没有考虑需求大于库存的情况
n,d = map(int,input().split())
s = list(int(i) for i in input().split())
r = list(int(i) for i in input().split())
p = []
for i in range(n):
rs = r[i]/s[i]
p.append(rs)
rem = d
r_sum = 0
while 1:
p_index = p.index(max(p))
if rem-s[p_index] <= 0:
r_sum += p[p_index]*rem
break
else:
rem -= s[p_index]
r_sum += r[p_index]
s.remove(s[p_index])
r.remove(r[p_index])
p.remove(p[p_index])
print("%.2f"%r_sum)
有一个测试点有非零返回,要将库存和售价转化为float型
n,d = map(int,input().split())
s = list(int(i) for i in input().split())
r = list(int(i) for i in input().split())
p = []
for i in range(n):
rs = r[i]/s[i]
p.append(rs)
rem = d
r_sum = 0
while 1:
p_index = p.index(max(p))
if rem-s[p_index] <= 0:
r_sum += p[p_index]*rem
break
else:
rem -= s[p_index]
r_sum += r[p_index]
s.remove(s[p_index])
r.remove(r[p_index])
p.remove(p[p_index])
if len(p) == 0:
break
print("%.2f"%r_sum)
博客探讨了PAT乙类1020题目中可能遇到的陷阱,包括需求大于库存的情况以及库存和价格可能是浮点数。测试点的反馈提示需要特别注意这些细节,以确保程序能正确处理非整数输入。

1154

被折叠的 条评论
为什么被折叠?



