Как получить сумму отрицательных чисел в массиве? - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу ввести 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 = 1006 *

Ответы [ 4 ]

0 голосов
/ 11 февраля 2019
(x..y).to_a.sum

где x - начальный номер диапазона, а y - последний элемент.См.
https://ruby -doc.org / core-2.2.0 / Range.html

0 голосов
/ 11 февраля 2019

Требуется сумма алгебраического ряда.

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 - количество элементов в серии.

0 голосов
/ 11 февраля 2019

Просто для удовольствия, смешиваясь для 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
0 голосов
/ 11 февраля 2019

Что вы можете сделать, это изменить порядок чисел в обратном порядке, если конечное значение больше начального значения:

a, b = b, a if a > b

Согласно книге "Программирование Ruby", объект Range хранит две конечные точкидиапазона и использует член .succ для генерации промежуточных значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...