给定数组A []和数字x,检查A []中的对,其中sum为x

时间:2016-05-17 11:41:37

标签: ruby-on-rails

给定数组A []和数字x,检查A []中的对,其中sum为x。任何人都可以帮我解决这个问题吗?

2 个答案:

答案 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. 找到3
  2. 的组合
  3. 使用`#inject'来汇总每个组合的所有元素
  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)

>> [5,4]

sum_to_x?(A,20)

>>