红宝石甚至斐波纳契数

时间:2016-12-27 00:24:19

标签: arrays ruby

我是编码的极端新手,我试图找到任何我可以练习的东西。这是欧拉测试中的一个问题。这就是我想出的答案,但我知道它可以缩短。我正在使用红宝石。我有两个问题。

1)我该怎么做才能清理它? 2)最后我只是将它拉出来并总结它们。我想做的是制作一个数字数组,然后在数组中搜索偶数答案然后求和。如何使结果填充数组?

我知道这是一个我想念的简单事情,我很抱歉用这样一个新事物来欺骗你们。

1   bob=0
2   x = 0
3   y = 1
4   index = 0
5   while index < 4000000
6       z = (x+y)
7       x = y
8       y = z
9
10      index = y
11
12      if z.even?
13          bob = bob+z
14      end
15  end
16  p bob

3 个答案:

答案 0 :(得分:2)

创建一个数组

array = []

向其追加元素

array << element

使用select

过滤它
array = array.select { |each| each.even? }

使用inject

对所有元素求和
sum = array.inject { |a, b| a + b }

最好阅读Enumerable模块的文档,以了解Ruby的所有数组方法。

一些最有用的功能是

  • all?
  • any?
  • collect
  • each_cons
  • each_slice
  • detect
  • inject
  • none?
  • select
  • take

享受Euler项目的乐趣!

答案 1 :(得分:0)

BTW,您可以使用链接方法来简化代码。像这样:

(1..10).select(&:even?).inject(:+)

(1..10)表示数字范围。 看看:

答案 2 :(得分:0)

最好由 $('#element_select2_2').prop('disabled', true); Docs处理。我将按如下方式进行:

Enumerator

然后,您可以使用fib_only_evens = Enumerator.new do |y| a,b =0,1 loop do y << a if a.even? a, b = b, a + b end end Enumberable#first

检索所需的均匀Fibonacci数字
#take

然后使用fib_only_evens.first(10) #=> [0, 2, 8, 34, 144, 610, 2584, 10946, 46368, 196418] fib_only_evens.take(20) #=> [0, 2, 8, 34, 144, 610, 2584, 10946, 46368, 196418, 832040, 3524578, 14930352, 63245986, 267914296, 1134903170, 4807526976, 20365011074, 86267571272, 365435296162] 对它们求和

Enumerable#reduce