2009-11-04 32 views
0

我有包含我的工作(在特定的順序)像下面值的數組:比較紅寶石陣順序最後元素

myArray = [3,6,5,6,2,1] 

我需要評估的數組中的元素並確定要複製的元素的數量。

規則是:我需要複製這些元素的總和不大於前一個元素的元素。

我可以種表達這樣的:

if myArray[-3] > (myArray[-2] + myArray[-1]) 
    elements_to_copy = [myArray[-2],myArray[-1]] 
else 
    elements_to_copy = [myArray[-1]] 
end 

這感覺很糟糕,因爲我不知道如何使它作爲迭代函數的工作,讓我可以繼續環比上漲直到比較失敗。

任何人都可以幫忙嗎?

回答

1
myArray = [3,5,6,2,1] 
i = 0 
myArray.reverse.inject do |sum, cur| 
    break if cur < sum 
    i -= 1 
    sum + cur 
end 

要複製的範圍是i..-1

+0

王牌,感謝Pesto - 我從你的答案中學到很多東西! – Les 2009-11-04 17:15:36

0
elements_to_copy = [] 
array = myArray.reverse 
array.each_with_index do |item, index| 
    if array.values_at[0..[index-1,0].max].sum <= item 
    elements_to_copy << item 
    end 
end 

如果我理解正確,應該這樣做。