【问题标题】:From multiple subsets, find all possible combinations of numbers to obtain a given sum从多个子集中,找到所有可能的数字组合以获得给定的总和
【发布时间】:2016-05-08 21:16:38
【问题描述】:

虽然我的部分问题已在此线程中得到解答;

Finding all possible combinations of numbers to reach a given sum

我正在寻找另一个功能。

在该页面上向下滚动查看 ruby​​ 解决方案,更重要的是最后一行,

subset_sum([3,9,8,4,5,7,10],15)

我想知道你将如何遍历多个数组,从每个数组中只选择一个数字并得出一个设定值。 我问的原因是因为我玩一个叫Heroclix的游戏。每件作品都有一定的积分价值,玩家可以组成数百人的团队。 我希望避免在团队中多次使用同一个名字的角色,因为他们恰好有不同的点数。

【问题讨论】:

  • @sawa 你应该在这里陈述你的问题是正确的。事实上,我认为甚至没有必要提及前面的问题。怎么样,“给定一个数组arr 的数字数组,我希望确定我是否可以从arr 的每个元素(数组)中选择一个数字,使得这些数字的总和等于给定的总数”。如果数字是非负数或正数,你应该这样说。
  • 我没有明确表示您需要编辑您的问题。
  • 我回答你的问题了吗?

标签: ruby algorithm combinations


【解决方案1】:
arr = [[1,2,3], [5,7,8], [4,9,13]]
target = 19

如果您只想要一种解决方案:

arr[0].product(*arr[1..-1]).find { |a| a.reduce(:+) == target }
  #=> [1, 5, 13]

如果您想要所有解决方案:

arr[0].product(*arr[1..-1]).select { |a| a.reduce(:+) == target }
  #=> [[1, 5, 13], [2, 8, 9], [3, 7, 9]]

对于两者:

arr[0].product(*arr[1..-1])
  #=> [[1, 5, 4], [1, 5, 9], [1, 5, 13], [1, 7, 4], [1, 7, 9], [1, 7, 13],
  #    [1, 8, 4], [1, 8, 9], [1, 8, 13], [2, 5, 4], [2, 5, 9], [2, 5, 13],
  #    [2, 7, 4], [2, 7, 9], [2, 7, 13], [2, 8, 4], [2, 8, 9], [2, 8, 13],
  #    [3, 5, 4], [3, 5, 9], [3, 5, 13], [3, 7, 4], [3, 7, 9], [3, 7, 13],
  #    [3, 8, 4], [3, 8, 9], [3, 8, 13]]

Array#product

【讨论】:

    猜你喜欢
    • 2021-01-02
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    相关资源
    最近更新 更多