从多个子集中,找到所有可能的数字组合以获得给定的总和

时间:2016-05-08 21:16:39

标签: ruby algorithm combinations

虽然我的问题的一部分已在这个帖子中得到回答;

Finding all possible combinations of numbers to reach a given sum

还有一个我正在寻找的功能。

向下滚动该页面以获取ruby解决方案,更重要的是在最后一行,

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

我想知道你将如何通过多个数组,从每个数组中选择一个数字并达到设定值。 我问的原因是因为我玩了一款名为Heroclix的游戏。每件作品都有一定的分值,玩家可以让团队成倍数倍。 我想要避免的是在团队中不止一次使用相同的命名角色,只是因为他们碰巧有不同的点费用。

1 个答案:

答案 0 :(得分:0)

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