给定数组A []和数字x,检查A []中的对,其中sum为x。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
ruby数组#combination
方法可以为您提供给定数量元素的数组成员的所有组合。
[1, 2, 3, 4, 5, 6].combination(2).to_a
=> [[1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [2, 3], [2, 4], ... [5,6]]
然后你只想选择他们加起来给定数字的元素。
[1, 2, 3, 4, 5, 6]combination(2).to_a.select{|comb| comb[0] + comb[1] == 7}
=> [[1, 6], [2, 5], [3, 4]]
要使其适用于不同数量的组合元素(例如3个而不是2个),您可以执行...
[1, 2, 3, 4, 5, 6]combination(3).to_a.select{|c| (c.inject(0) {|sum,x| sum + x}) == 7}
这适用于2,3,4或任何数字,直到完整的数组大小。
它的工作原理是
答案 1 :(得分:0)
您可以通过自己的功能轻松实现:
def sum_as_x?(ary,x)
num=a.find{|e| ary.include?(x-e)}
unless num
puts "not exist"
else
p [x-num,num]
end
end
a = [1,2,3,4,5]
sum_to_x?(一,9)
sum_to_x?(A,20)