Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ruby中增量添加_Ruby - Fatal编程技术网

如何在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