找到具有美元金额上限的硬币组合
Finding a Combination of Coins with dollar amount ceiling
场景是这样的:一袋面额有50枚硬币:
- 50分:5
- 25分:10
- 10分:15
- 5分片:20
您可以从袋子中选择五枚硬币(无需更换)。顺序无关紧要。总组合是 50 选 5,即 2,118,760,但总和小于 1 美元的组合有多少种?不允许组合四个或更少的硬币。您必须选择五个硬币。
示例:
50 美分,25 美分,5 美分,10 美分,5 美分 - 好
50 美分、25 美分、25 美分、10 美分、10 美分 - 不好
可以使用 Excel 来完成吗?我想首先生成所有组合的列表,然后消除那些小于 1 美元的结果,但我看不出有什么办法可以做到这一点。
我使用 excel 以外的程序会更好吗?
首先,您每种硬币至少有五枚,所以每种面额的硬币数量没有限制。您可以在每个选项中选择四种面额中的任何一种。因此,您只需考虑 4^5 个排列。
Python 中最简单的方法是设置 [50, 25, 10, 5] 的选择列表。循环可能的选择,以非递增的顺序列出5个硬币(选择位置不能小于前一个)。
在每次选择硬币时,检查总和(list_so_far);如果 >= 100,继续。
在每个 5 个列表的末尾,将幸存者添加到您的解决方案列表中。
这是否让您行动起来足够顺利?我们尽量不充当代码编写服务。我希望这次攻击在你的编程能力范围内。
如果您正在研究排列与组合,请查看 itertools
库,您将找到对可枚举序列进行操作的两者的函数。
import itertools
fifties = [50 for i in range(5)]
twentyfives = [25 for i in range(10)]
tens = [10 for i in range(15)]
fives = [5 for i in range(20)]
bag = fifties + twentyfives + tens + fives
allcombinations = itertools.combinations(bag, 5)
less_than = [comb for comb in allcombinations if sum(comb) < 100]
场景是这样的:一袋面额有50枚硬币:
- 50分:5
- 25分:10
- 10分:15
- 5分片:20
您可以从袋子中选择五枚硬币(无需更换)。顺序无关紧要。总组合是 50 选 5,即 2,118,760,但总和小于 1 美元的组合有多少种?不允许组合四个或更少的硬币。您必须选择五个硬币。
示例:
50 美分,25 美分,5 美分,10 美分,5 美分 - 好
50 美分、25 美分、25 美分、10 美分、10 美分 - 不好
可以使用 Excel 来完成吗?我想首先生成所有组合的列表,然后消除那些小于 1 美元的结果,但我看不出有什么办法可以做到这一点。
我使用 excel 以外的程序会更好吗?
首先,您每种硬币至少有五枚,所以每种面额的硬币数量没有限制。您可以在每个选项中选择四种面额中的任何一种。因此,您只需考虑 4^5 个排列。
Python 中最简单的方法是设置 [50, 25, 10, 5] 的选择列表。循环可能的选择,以非递增的顺序列出5个硬币(选择位置不能小于前一个)。
在每次选择硬币时,检查总和(list_so_far);如果 >= 100,继续。
在每个 5 个列表的末尾,将幸存者添加到您的解决方案列表中。
这是否让您行动起来足够顺利?我们尽量不充当代码编写服务。我希望这次攻击在你的编程能力范围内。
如果您正在研究排列与组合,请查看 itertools
库,您将找到对可枚举序列进行操作的两者的函数。
import itertools
fifties = [50 for i in range(5)]
twentyfives = [25 for i in range(10)]
tens = [10 for i in range(15)]
fives = [5 for i in range(20)]
bag = fifties + twentyfives + tens + fives
allcombinations = itertools.combinations(bag, 5)
less_than = [comb for comb in allcombinations if sum(comb) < 100]