我需要找出一个整数数组是否包含一个或多个元素,这些元素将数组分成两部分,使得左边和右边部分的元素总和相等。
我试过了:
arr = [1,2,3,4,3,2,1]
left_sum = 0
right_sum = arr.inject(0) { |sum, x| sum = sum + x }
for i in 0..arr.length-1
counter = []
right_sum = right_sum - arr[i]
case i
when 0
left_sum = 0
else
left_sum = left_sum + arr[i-1]
end
puts "Left sum of element #" + i.to_s + "=" + left_sum.to_s
puts "Right sum of element #" + i.to_s + "=" + right_sum.to_s
puts " "
if right_sum - arr[i] == left_sum + arr[i-1]
puts "Left sum" + "=" + "Right sum"
counter.push(i)
end
puts counter.to_s
end
我遇到了一个错误。我不明白为什么if
- 语句在for
- 循环中不起作用。我做错了什么?
答案 0 :(得分:1)
旁注: for
循环在ruby中是反惯用的(读:没有人在ruby中使用for
循环。)
您的代码问题出在上一次比较中。你已经计算了总和,因此你不应该改变它们:
# if right_sum - arr[i] == left_sum + arr[i-1]
if right_sum == left_sum
puts "Left sum" + "=" + "Right sum"
counter.push(i)
end
答案 1 :(得分:1)
在ruby中使用for
不是一个好主意,你可以在Ruby中使用each
for循环。
arr.each { |i|
...
}
此外,您还需要在询问是否等于之前计算总和。
right_aux = right_sum - arr[i]
left_aux = left_sum + arr[i-1]
if right_aux == left_aux
puts "Left sum" + "=" + "Right sum"
counter.push(i)
end