⼤⾬过后,⼭上落下的⽯头堵塞了公路。⼤⼒⼠⼩A去帮忙疏通道路。已知⼩A能拖动总重量不超过200公⽄的⽯头,所有⽯头的重量保存在列表"⽯头重量"中,求⼩A最多能拖动多少块⽯头?
注意:此题不能使⽤“停⽌全部脚本”“停⽌这个脚本”和“停⽌该⾓⾊的其他脚本”积⽊!
【输⼊格式】
“输⼊”列表,表⽰⽯头们的重量。
【输出格式】
⼩A最多能拖动的⽯头块数
【输⼊样例1】
【输出样例1】
7
说明:最多能拖⾛11+15+23+27+32+33+42这7块⽯头,它们重量之和为183公⽄。如果再多加⼀块⽯头,总重是(237)就超过能拖动的上限200公⽄了。
分析:
我们需要从给定的石头重量列表中,选择尽可能多的石头,使得这些石头的总重量不超过200公斤。这是一个典型的“背包问题”的变种。为了最大化石头的数量,我们应该优先选择重量较小的石头。这样可以在有限的重量限制下,尽可能多地选择石头。因此,可以按照以下步骤进行:
1、将石头重量列表按从小到大的顺序排序。
2、从最小的石头开始,依次累加石头的重量,直到总重量不超过200公斤。
3、记录能够选择的石头数量。
实现步骤:
第一步:创建列表,通过重复执行,输入若干(例如:10个)石块的重量。
第二步:使用排序算法,将列表中的数从小到大排列。
下面以冒泡排序进行操作,新建三个变量i,j用于遍历,temp用于交换列表中两个数使用的临时变量。(冒泡排序算法详见:5分钟理解冒泡排序算法,并用scratch实现)
第三步:从最小的石头开始,依次累加石头的重量,直到总重量不超过200公斤。
新建变量:k、个数(记录石头数量)、总重量、flag(题目要求不能使⽤“停⽌全部脚本”“停⽌这个脚本”和“停⽌该⾓⾊的其他脚本”积⽊)用于标记是否超出重量,如果超过重量结束循环。
完整程序下载:背包问题-搬运石头.sb3
本站内容未经许可,禁止任何网站及个人进行转载。