找到硬币组合与金额上限

时间:2015-09-24 22:52:27

标签: python excel statistics combinations probability

场景是这样的:以下面额的袋子中有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以外的程序会更好吗?

2 个答案:

答案 0 :(得分:0)

首先,每种类型至少有五枚硬币,因此对每种面额的数量没有限制。您可以选择四种面额中的任何一种。因此,您只需考虑4 ^ 5个排列。

Python中最简单的方法是设置[50,25,10,5]的选择列表。循环可能的选择,以非增加的顺序列出5个硬币(选择位置不能小于前一个)。

在每个硬币选择中,检查总和(list_so_far);如果> = 100,继续。

在每个5列表的末尾,将幸存者附加到您的解决方案列表中。

这会让你移动得足够好吗?我们尽量不作为代码编写服务。我希望这次攻击符合你的编程能力。

答案 1 :(得分:0)

如果您正在研究排列与组合,请查看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]