2015-02-08 39 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