【发布时间】:2015-07-09 10:13:20
【问题描述】:
我正在学习 Ruby,但遇到了这个问题:
提示:使用 Ruby 语言,让函数 ArrayAdditionI (arr) 获取存储在 arr 中的数字数组,如果数组中的任何数字组合可以相加等于数组中的最大数字,则返回字符串 true , 否则返回字符串 false。例如:如果 arr 包含 [4, 6, 23, 10, 1, 3],则输出应返回 true,因为 4 + 6 + 10 + 3 = 23。数组不会为空,不会包含所有相同的元素,并且可能包含负数。
我的回答如下:
def ArrayAdditionI(arr)
largest_num = nil
arr.each do |element|
if largest_num == nil || element > largest_num
largest_num = element
end
end
arr = arr - [largest_num]
idx=0
count = 1
while (idx+count) < arr.size # <==== this line
puts idx+count
puts arr.size
count = 1
result = arr[idx]
while idx + count < arr.size
if result + arr[idx+count] == largest_num
return true
else
result = result + arr[idx+count]
count+=1
end
end
idx+=1
end
false
end
除非我将while (idx+count) < arr.size 行更改为while true,否则代码不会为[3,5,-1,8,12] 返回正确的输出true。否则,我在那个“while”循环中的代码将不会循环。谁能解释为什么?谢谢。
【问题讨论】:
-
第2-6行可以换成
largest_num = arr.max
标签: ruby arrays while-loop