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