【问题标题】:How to solve fibonacci in ruby (HackerRank)如何在 ruby​​ 中解决斐波那契 (HackerRank)
【发布时间】:2020-07-25 07:24:48
【问题描述】:

我正在尝试解决 HackerRanck 中的斐波那契解决方案。

  • 我主要使用注入方法。
  • 我首先声明了一个空数组。
  • 然后我定义了一个方法,该方法接受一个参数并将其转换为一个存储两个初始值 0 和 1 的列表。
  • 然后该方法获取最后两个值并将它们相加并返回新形成的列表。 (我希望我的逻辑是正确的)

然后我的目标是调用该方法并这次循环遍历它,将其中的所有偶数值相加并返回最终结果。

#!/bin/ruby

t = gets.strip.to_i
for a0 in (0..t-1)
    n = gets.strip.to_i
end

result = 0

def fibbonacci num
    (1..num).inject([0, 1]) { |fib| << fib.last(2).inject(:+)}
end

my_fib_num = fibbonacci n

for i in my_fib_num
    if i % 2 == 0
        result.inject(0){|sum,x| sum + x }
    end
end```

Anything I could be getting wrong here?

【问题讨论】:

标签: ruby fibonacci


【解决方案1】:

也许你可以使用 select 并一起注入一些偶数

t = gets.strip.to_i

def fibbonacci(num)
  (1..num).inject([0, 1]) { |fib| fib << fib.last(2).inject(:+)}
end

my_fib_num = fibbonacci(t)
my_fib_num.keep_if{|d| d.even?}.inject(:+)

【讨论】:

    【解决方案2】:

    我看到你在这里做了不必要的事情,而且你以完全错误的方式使用注入。应该始终在数组或范围对象上调用注入。在每个循环中,循环的结果将分配给块的第一个参数(即下面示例中的结果),并将再次传递回下一个循环。最后返回结果中的值。

    更新后的代码:

    #!/bin/ruby
    
    t = gets.strip.to_i
    def fibbonacci(num)
        (1..num).inject([0, 1]) { |result| result << result.last(2).inject(:+)}
    end
    my_fib_num = fibbonacci(t)
    result = my_fib_num.inject(:+)
    

    注意:解决方法是使用inject来解决。

    参考:https://apidock.com/ruby/Enumerable/inject

    【讨论】:

      猜你喜欢
      • 2016-04-21
      • 2010-10-12
      • 2014-09-10
      • 2017-12-12
      • 1970-01-01
      • 2015-01-06
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多