虽然我的问题的一部分已在这个帖子中得到回答;
Finding all possible combinations of numbers to reach a given sum
还有一个我正在寻找的功能。
向下滚动该页面以获取ruby解决方案,更重要的是在最后一行,
subset_sum([3,9,8,4,5,7,10],15)
我想知道你将如何通过多个数组,从每个数组中选择一个数字并达到设定值。 我问的原因是因为我玩了一款名为Heroclix的游戏。每件作品都有一定的分值,玩家可以让团队成倍数倍。 我想要避免的是在团队中不止一次使用相同的命名角色,只是因为他们碰巧有不同的点费用。
答案 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]]