数组添加,为什么从' i = 2'?开始?

时间:2015-06-29 03:53:33

标签: arrays ruby sum subset

  

使用Ruby语言,让函数ArrayAdditionI(arr)获取存储在arr中的数字数组,如果数组中的任何数字组合可以加到数组中的最大数字,则返回字符串true,否则返回字符串false。例如:如果arr包含[4,6,23,10,1,3],则输出应返回true,因为4 + 6 + 10 + 3 = 23.数组不会为空,不包含所有相同的元素,并且可能包含负数。

有人可以向我解释为什么这段代码开始于' i = 2'而不是' i = 0'?

def ArrayAdditionI(arr)     
  i = 2

    while i < arr.length
     return true if arr.combination(i).map{|comb| comb.inject(:+)}.include?(arr.max)
     i += 1
   end

 false  

end

ArrayAdditionI(STDIN.gets) 

纠正我,如果我错了,但是i = 2,while循环将迭代[2..4]然后停止。但这是否允许所有潜在的组合?... =&gt;代码工作,显然它确实如此,但我只是没有看到它。

3 个答案:

答案 0 :(得分:1)

i不是数组的索引,而是用于创建组合的元素数。因此,如果数组中的最大数字可以仅使用两个元素的总和,则它会停止,如果不是它会尝试三个,依此类推。

答案 1 :(得分:1)

array.combination(i)返回长度为i的数组中所有可能的元素组合。

例如 如果     ar=[4, 6, 23, 10]

然后      array.combination(2).to_a 回报     [[4,6],[4,23],[4,10],[6,23],[6,10],[23,10]]

所以基本上你需要在你的程序中找到sum并得到sum需要长度为2的组合(你需要以所有可能组合的操作数)。因此,您不能从i=0i=1开始。

答案 2 :(得分:0)

你不能给它一个空数组,所以0导致false。如果数组中有1个元素,那么它也没有意义。所以我猜2是一个让这个测试有意义的起点。