所以问题是要求我在给出N个三明治之后代表不同人的饥饿程度,范围从0到5,范围从1到20.数组的格式为[N,h1,h2,h3 ,...]阵列的其余部分将代表不同人的饥饿程度。我的目标是使用我可用的三明治最小化阵列中每对人之间的饥饿差异。
所以我的计划是通过每个元素并减去下一个元素的差异,但我不知道为什么它不会减少我的三明治柜台。
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 :(得分: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
答案 1 :(得分:0)
我建议发布整个问题,以便我们可以在上下文中看到问题。我不确定'正确'解决问题的方法,但是......由于if条件中的这两行,计数器没有递减...:
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中减去这个差值(0),因此N不会递减。
arr[0] -= (arr[i] - arr[i - 1])
我建议在条件中插入binding.pry,这样可以检查变量在每次迭代时的状态。大帮助!
祝你好运!