如何获得数组中的负数之和?

时间:2019-02-10 23:55:26

标签: arrays ruby sum

我想输入2个数字并计算这2个数字之间的数字之和。 例如(1,3)1 + 2 + 3 = 6

我尝试了下面的代码,该代码具有2个肯定值,但是这并不会增加正值+否定值,并且每次都会返回0

def get_sum(a,b)
 if a > b || a < b 
  num_array = (a..b).to_a.sum
  puts num_array
  else 
  puts a
 end
end

get_sum(2,-3)

预期-3而是返回0

4 个答案:

答案 0 :(得分:6)

您想要一个代数级数的总和。

def get_sum(a,b)
  ((a-b).abs+1)*(a+b)/2
end

get_sum( 1,  4)  #=>  10 
get_sum( 4,  1)  #=>  10 
get_sum(-4, -1)  #=> -10 
get_sum(-1, -4)  #=> -10
get_sum(-3,  4)  #=>   4
get_sum( 4, -3)  #=>   4
get_sum(-4,  3)  #=>  -4 
get_sum( 3, -4)  #=>  -4

(a-b).abs+1是系列中元素的数量。

答案 1 :(得分:4)

如果结束值大于开始值,您可以做的是颠倒数字的顺序:

a, b = b, a if a > b

根据“ Ruby编程”一书,Range对象存储范围的两个端点,并使用.succ成员生成中间值。

答案 2 :(得分:0)

只是为了好玩,混搭Ruby 2.6:

x, y = 2, -3
[x,y].tap{ |a| a.reverse! if a[0] > a[1] }.then{ |x,y| (x..y).sum }
#=> -3

答案 3 :(得分:0)

(x..y).to_a.sum

其中x是范围起始数字,y是最后一个元素。 参考:
https://ruby-doc.org/core-2.2.0/Range.html