咱给威威快递算算账,看他们怎么把箱子“塞”进大卡车里。现在有个面积固定的平面运输车,想把这些不能叠放的箱子水平装进去。批量输入的箱子面积用逗号隔开,而且单箱的面积都不能超过车箱的总面积S。目标就是用最少的车辆,一次性把所有箱子全拉走,最后只给个车数就行。 咱把箱子按面积从大到小排个序,优先把大块头塞进车厢,留出的空儿再用小块头去填。这样不仅能减少车数,算起来也直观。然后用个变量remaining记录当前还剩多少地方可用,遍历排好序的箱子列表。要是某个箱子能放下,就把它的面积从remaining里减掉;要是放不下了,立马开新车,再把remaining重置成车厢的总面积S。 循环完了之后,剩下的车厢面积remaining要是还有余,说明有辆车没装满。不过题目要求一车不剩地装完,那就直接把算出来的车辆总数输出好了。 下面是Python代码实现: 先把面积列表按降序排好areas = sorted(areas, reverse=True),然后用trucks记录要多少辆车,用remaining表示当前还剩多少地方可用。 遍历面积列表的时候: 要是剩下的地方够大(remaining >= area),就把它的面积减掉(remaining -= area)。 要是不够大(放不下),就给车数加一(trucks += 1),然后重置remaining为车厢的总面积S。 最后要注意,若最后一辆车没装满(remaining > 0),还得再把车数加一才补满。 比如车厢总面积是100,箱子面积是15、25、30、20这几个数,打印出来就是2(两辆车刚好装完)。 相关技能: range()函数能生成一串整数; sorted()函数可以排序列表; append()方法可以往列表末尾加东西(虽然这里没用上)。