如何在ruby中增量添加
如何以增量方式添加如何在ruby中增量添加,ruby,Ruby,如何以增量方式添加 x = 1 while x < 365 x+=x puts x end x=1 而x
x = 1
while x < 365
x+=x
puts x
end
x=1
而x<365
x+=x
放x
结束
但这是不对的
谢谢 如果我正确理解了您的需求:
(1..365).reduce(0) { |memo, i| memo + i }
#⇒ 66795
或者,简而言之(归功于@Jỏrg W.Mittag):
在这里,我们使用标准程序。首先,我们构造范围,包含从1到365的整数。然后我们迭代这些整数,携带总数(根据ruby约定命名为
memo
。从数学上讲,你要寻找n=1到y的n的总和,这个总和可以减少到y(y+1)/2。因此,您可以将其计算为:
x = 365*(365+1)/2 #=> 66795
不需要任何循环。这种编码方式效率更高;O(1)而不是O(n)。我认为这看起来是正确的,基本上它必须按如下方式计算,当一件物品售出后,因此:$1售出,然后$1+2售出=3,然后$3+3=6,$6+4=10,$10+5=15,然后$15+11=26,依此类推,直到$365。你想解释一下你的答案吗,我是ruby的新手,这会非常有帮助。谢谢我会接受你的回答。干杯@mudasobwa,我想具体来说,reduce(0)有什么作用?从我收集的数据来看,你已经设置了一个范围,从1到365,memo是1递增/添加,I是365?是不是增加到365了?请澄清。它必须添加已售出的物品+新价格,一直到365美元。谢谢无需分配给
备忘录
。它是局部变量,无论如何都会超出范围。@Apane101我用引用和解释更新了答案。你可以说(1..365)。reduce(0){acc,el|acc+el}
,这与(1..365)完全相同。reduce(0,:+)
,这反过来又与(1..365)相同。reduce(:+)
,实际上是366*365/2
或66795
。请定义“增量添加”的含义。你的意思是你想要整数的和在1和365之间,包括1和365吗?我不确定你是否需要引用我们在代数I(或之前)中学习过的公式,如果你忘记了,可以很容易地导出该公式。:-)
x = 365*(365+1)/2 #=> 66795