我有一个数组@ary = [1, 3, 4, 2, 7, 8, 9]
,我想知道组合的可能性有多少等于9。
我应该有四种可能性,可以添加等于9 [1,8]
,[2, 3, 4]
,[9]
,[2, 7]
,但在我的代码中,我只知道两种可能性和只是可以在这个问题上展示一种可能性。
def sums (num, target)
random1 = num.sample
random2 = num.sample
if random1+random2 == target
ary1 = [random1, random2]
end
end
答案 0 :(得分:3)
您可以使用Array#combination
:
(1..ary.size).inject(0) do |a, e|
a + ary.combination(e).count { |e| e.sum == 9 }
end
#=> 4
如果您的ruby版本低于2.4,则可以使用inject(:+)
代替sum
。
答案 1 :(得分:3)
如果您对组合本身感兴趣而不仅仅是计数:
(1..a.size).flat_map { |n| a.combination(n).to_a }
.keep_if { |c| c.inject(:+) == 9 }
#=> [[9], [1, 8], [2, 7], [3, 4, 2]]