找到具有美元金额上限的硬币组合

Finding a Combination of Coins with dollar amount ceiling

场景是这样的:一袋面额有50枚硬币:

您可以从袋子中选择五枚硬币(无需更换)。顺序无关紧要。总组合是 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]