2017-09-07 15 views
0

質問は、1から20までのNサンドイッチを出した後、0から5までのさまざまな人々の飢えのレベルを表現するよう求めています。配列の残りの部分は、異なる人の飢えのレベルを表します。私の目標は、私が持っているサンドイッチを使用して配列の人々の各ペアの間の飢餓の違いを最小限に抑えることです利用可能。誰かが私のカウンターがなぜ減ったのかを説明することができます

だから私の計画では、各要素を通過して動作しますが、それは私のサンドイッチカウンターを低下しない理由を私は知らない次の要素との差分を減算することでした。

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

を通常「最小化」の問題は、どこか意味順列、[ 'permutation'](https://ruby-doc.org/coreを伴います-2.4.0/Array.html#method-i-permutation)が有効になります。ここで 'サンドウィッチ'は定義されていますが、使用されていないことに注意してください。 – tadman

答えて

0

私は文脈で問題を見ることができるように、問題全体を投稿することをお勧めします。私は、どのような問題を解決するために「正しい」やり方わからない、しかし...カウンターがあるため、あなたの場合、条件付きでこれらの2行でデクリメントされていません..:

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

この行が効果的に両方のARRを設定し、 [i]とarr [i] - 1を同じ値に設定します。例:

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

したがって、arr [i]とarr [i - 1]は同じです。それらの差はゼロです。次の行では、この差(N)をNから減算します。したがって、Nは減分しません。

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

私は、彼らがそれぞれの反復..ビッグ助けて変更すると、あなたの変数の状態を調べることができますあなたの条件付きでbinding.pryを、挿入をお勧めします!

運が良かった!

1

変更、それをあなたが最初のサンドイッチから減算されるように:

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 
関連する問題