3 votes

Comment obtenir une somme de nombres négatifs dans un tableau ?

Je veux entrer 2 nombres et calculer le total des nombres compris entre les 2 nombres et lui-même. Par exemple (1,3) 1+2+3 = 6

J'ai essayé le code ci-dessous, qui fonctionne avec 2 positifs, mais qui n'additionne pas positif + négatif et renvoie 0 à chaque fois.

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)

attendue -3 renvoie au lieu de cela 0

6voto

Cary Swoveland Points 6784

Vous souhaitez obtenir la somme d'une série algébrique.

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 est le nombre d'éléments de la série.

4voto

hashrocket Points 931

Ce que vous pouvez faire, c'est inverser l'ordre des nombres si la valeur finale est supérieure à la valeur initiale :

a, b = b, a if a > b

Selon le livre "Programming Ruby", l'objet Range stocke les deux extrémités de la plage et utilise le membre .succ pour générer les valeurs intermédiaires.

1voto

Himanshu Goyal Points 1
(x..y).to_a.sum

où x est le numéro de départ de la plage et y le dernier élément. Se référer à :
https://ruby-doc.org/core-2.2.0/Range.html

0voto

iGian Points 2148

Juste pour le plaisir, mélange pour 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X