2017-09-07 6 views
0

Donc la question me demande de représenter le niveau de faim de différentes personnes allant de 0 à 5 après avoir donné N sandwiches qui vont de 1 à 20. Le format de la matrice sera [N, h1, h2, h3, ...] le reste du tableau représentera les niveaux de faim de différentes personnes.Mon objectif est de minimiser la différence de la faim entre chaque paire de personnes dans le tableau en utilisant les sandwichs que j'ai disponible.Quelqu'un peut-il expliquer pourquoi mon compteur n'a pas diminué

donc mon plan était de passer par chaque élément et soustraire la différence par rapport à l'élément suivant qui fonctionne, mais je ne sais pas pourquoi il ne diminuera pas mon compteur sandwich.

def FoodDistribution(arr) 
    sandwiches = arr[0] 

    2.upto(arr.length - 1) do |i| 
     arr[1] -= arr[1] - arr[2] if arr[1] > arr[2] 
     if arr[i] > arr[i - 1] && arr[0] > 0 
      arr[i] -= (arr[i] - arr[i - 1]) 
      arr[0] -= (arr[i] - arr[i - 1]) 
     end 
end 
return arr 

end 
+0

En général, "minimisation" des problèmes qui exigent la permutation, ce qui signifie que quelque part [ 'permutation'] (https://ruby-doc.org/core -2.4.0/Array.html # method-i-permutation) devrait entrer en jeu. Notez que 'sandwiches' ici est défini, mais jamais utilisé? – tadman

Répondre

0

Je recommande d'afficher l'ensemble du problème afin que nous puissions voir le problème dans son contexte. Je ne suis pas sûr de ce que la façon de résoudre le problème « correct », mais ... le compteur ne décrémentation à cause de ces deux lignes dans votre si elle est conditionnelle ..:

arr[i] -= (arr[i] - arr[i - 1]) 

cette ligne définit de manière efficace à la fois arr [i] et arr [i] - 1 à la même valeur. Exemple:

x = 3 
y = 4 
y -= (y - x) ## y - x = 1 
y == 3 

Ainsi, arr [i] et arr [i-1] sont maintenant identiques. leur différence est zéro. Dans la ligne suivante, vous soustrayez cette différence (0) de N, ainsi N ne décrémente pas.

arr[0] -= (arr[i] - arr[i - 1]) 

Je recommande l'insertion d'un binding.pry dans votre condition, ce qui vous permettra d'examiner l'état de vos variables comme ils changent à travers chaque itération .. grande aide!

Bonne chance!

1

changer afin que vous soustrayez des sandwichs premier:

def FoodDistribution(arr) 
    sandwiches = arr[0 

    2.upto(arr.length - 1) do |i| 
    arr[1] -= arr[1] - arr[2] 

    if arr[1] > arr[2] 
     if arr[i] > arr[i - 1] && arr[0] > 0 
      arr[0] = arr[0] - (arr[i] - arr[i - 1]) 
      arr[i] -= (arr[i] - arr[i - 1]) 
     end 
    end 

    return arr 
end