2015-02-08 40 views
-2

如何增量添加?如何在紅寶石中增量添加

x = 1 

while x < 365 
    x+=x 
    puts x 
end 

,但這是不正確的

謝謝!

+0

請定義「增量增加」的含義。你的意思是你想要1到365之間的整數總和,包括? – 2015-02-08 20:13:24

+0

是的,遞增。 – Apane101 2015-02-09 01:46:19

回答

1

如果我理解正確的,你需要的東西:

(1..365).reduce(0) { |memo, i| memo + i } 
#⇒ 66795 

,或者在很短的形式(學分@約爾格W.米塔格):

(1..365).reduce(:+) 

這裏我們使用的Range標準reduce程序。首先我們構造範圍,包含從1到365的整數。然後我們遍歷這些整數,攜帶總數(根據ruby約定命名爲memo)。

+0

我認爲這看起來是正確的,本質上它必須計算如下,當一個項目出售和以後,所以:1美元出售,然後1美元+ 2美元出售= 3美元,然後3美元+3美元= 6美元,6美元+4美元= 10美元,10美元+ $ 5 = $ 15,然後$ 15 + $ 11 = $ 26等等,直到$ 365。你是否在意解釋你的答案的工作原理,我對Ruby有點新鮮感,這會非常有幫助。謝謝!我會接受你的回答。 – Apane101 2015-02-08 17:51:19

+0

乾杯@mudasobwa,我想具體是,減少(0)做什麼?從我收集的內容來看,你已經設置了1..365的範圍,備忘錄是1遞增/添加,而我是365?它是否增加到365?請澄清。它必須增加銷售的物品+新的價格,一直高達365美元。謝謝! – Apane101 2015-02-08 17:56:59

+2

有沒有必要分配給'備忘錄'。這是局部變量,反正它會超出範圍。 – 2015-02-08 17:59:09

3

從數學上講,你正在尋找n = 1到y的總和。 According to WolframAlpha,這個總和可以減少到y(y + 1)/ 2。因此,您可以將其計算爲:

x = 365*(365+1)/2 #=> 66795 

不需要任何循環。這種代碼方式更高效; O(1)而不是O(n)。

+0

你們都是對的,所以+1! – Apane101 2015-02-08 18:03:51

+0

我不確定你需要引用一個我們都在代數I(或之前)中學過的公式的參考文獻,如果忘記的話可以很容易地推導出這個公式。 :-) – 2015-02-08 20:17:58