【发布时间】:2016-08-30 05:11:57
【问题描述】:
这是针对我从 CoderByte 提出的数组加法问题:
让函数ArrayAdditionI(arr) 获取存储在 arr 中的数字数组,如果数组中的任何数字组合可以加起来等于数组中的最大数字,则返回字符串 true,否则返回字符串 false。
例如:如果arr 包含[4, 6, 23, 10, 1, 3],则输出应返回true,因为4 + 6 + 10 + 3 = 23。该数组不会为空,不会包含所有相同的元素,并且可能包含负数。
我想知道为什么会这样:
def ArrayAdditionI(arr)
sum = []
largest = arr.sort!.pop
1.upto(arr.count) do |i|
arr.combination(i).to_a.each do |subarr|
sum << subarr.inject(:+)
end
end
sum.include?(largest)
end
但这不会:
def ArrayAdditionI(arr)
1.upto(arr.count) do |i|
arr.combination(i).to_a.each do |subarr|
return true if arr.sort!.last == subarr.inject(:+)
end
end
false
end
或者为什么这不会:
def ArrayAdditionI(arr)
sorted_arr = arr.sort
1.upto(arr.count) do |i|
arr.combination(i).to_a.each do |subarr|
return true if sorted_arr.last == subarr.inject(:+)
end
end
false
end
我想强调的代码之间的一些关键点和区别。在有效的代码中,将一个空数组分配给“sum”。并且数组中的最大数被分配了变量“最大”。要检查最大值是否等于任何总和,调用.include? 方法。我想通过排序和调用数组上的最后一个整数来尝试从块内访问最大的整数,但这似乎不起作用。
我已经口头尝试过测试用例,但我似乎无法弄清楚代码有什么问题。有什么隐含的东西是我没听懂的吗?
【问题讨论】: