【问题标题】:Finding a Combination of Coins with dollar amount ceiling [closed]寻找具有美元金额上限的硬币组合[关闭]
【发布时间】:2015-12-22 16:44:59
【问题描述】:

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

【问题讨论】:

  • 这是一道作业题吗?
  • 不,我正在研究更容易的基本组合与排列。我只是好奇是否有办法解决这样的问题。我补了金额
  • 小于 1 美元,而不是 1 美元。甚至 5 个镍币也满足约束条件。
  • @Prune 完全正确。他们可能不是为这个例子选择的正确教派。我的问题实际上是关于如何消除基于另一个变量或调节器的组合。例如,50-50---* 总是会被淘汰。我从未听说过递归,但听起来 Python 是我必须学习的东西
  • 我不认为递归是解决这个问题的最佳方法:只需循环选择五个硬币,每个合法选择一次(这是选择五次循环中的一个循环)。

标签: python excel statistics combinations probability


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    在每次选择硬币时,检查 sum(list_so_far);如果 >= 100,则继续。

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

    这是否让您移动得足够好?我们尽量不充当代码编写服务。我希望这种攻击在你的编程能力范围内。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多