【问题标题】:To calculate every third term in a Fibonacci sequence计算斐波那契数列中的每第三项
【发布时间】:2015-02-26 18:55:41
【问题描述】:
int Fib1, Fib2, Fib3, FibSum;

Fib1 = 0;
Fib2 = 1;

while(Fib3 < 500000)
{
    Fib3 = Fib1 + Fib2;
    Fib1 = Fib2;
    Fib2 = Fib3;
    FibSum = Fib3 + Fib1;
}
printf("%d\n", FibSum);
return 0;

我想对斐波那契数列的每第三项求和,但我的答案是 832040,它必须是 158905...任何帮助将不胜感激!

【问题讨论】:

  • 你能解释一下为什么一定是158905
  • 所以斐波那契数列是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377...。应该将其中哪些相加并达到哪个数字?
  • 它应该小于 500000。如果你添加每 3 个小于 500000 的项,那么你得到 158905

标签: fibonacci


【解决方案1】:

这看起来像是家庭作业,但嘿,我曾经也是一名学生。还在学习中。

我在 R 中编写了以下代码,但您可以照着做:

fib1 <- 0
fib2 <- 1
fib3 <- 0
fib_sum <- 0
placeholder <- 0

while(fib3 < 500000)
{
    placeholder <- placeholder + 1 
      f1 <- fib1
      f2 <- fib2
      f3 <- fib3
      fib3 <- fib1 + fib2
      fib1 <- fib2
      fib2 <- fib3

    if(placeholder %% 3 == 0) 
    { 
       fib_sum <- fib_sum + f1
       print(paste('postsum [placeholder, fib_sum, fib1, fib2, fib3]: ',
            placeholder, ' ', fib_sum, ' ', f1, ' ', f2, ' ', f3))
    }
}
print(fib_sum)

这会导致您正在寻找的东西。上课时间,因为这似乎是家庭作业的帮助。为了帮助你成为一名更好的程序员,我建议在编程时采用脚手架的方法(只需在每一行左右打印出所有内容)。

这将帮助您了解您的程序在执行过程中是如何演变的。

下面有没有更好的解决方案?我确信有,但由于我在编程时输出了代码,所以我能够更快地得出结论。

希望对您有所帮助。

【讨论】:

  • F1 - 3 有什么用我不太明白你为什么用它?
  • f1、f2、f3存储了while循环开始时序列的状态。然后其余代码移动序列,然后测试这是否是模运算符的第三次,并将 fib_sum 与您所在的斐波那契数列中的第一个数字一起存储。
【解决方案2】:

有一个计算每三个斐波那契数的捷径: 如果你想求和 1,5,21,89,377 ...然后你将你拥有的前两个数字求和 (fibsum = 1 + 5),然后在循环中计算并添加下一个数字。

fib1 = 1 
fib2 = 5
fib3 = 0
fibsum = fib1 + fib2
while fib3 < 500000 :
    fib3 = fib2*4+fib1
    if fib3 < 500000:
        fibsum += fib3
    fib1 = fib2
    fib2 = fib3
print fibsum 

【讨论】:

    【解决方案3】:

    这是一些工作代码,应用了HERE中的公式

    double phi1 = (1 + sqrt(5)) / 2.0;
    double phi2 = (1 - sqrt(5)) / 2.0;
    
    int counter = 2;//Third term
    
    int total = 0, term;
    
    while (true) {
        term = (pow(phi1, counter) - pow(phi2, counter)) / (phi1 - phi2);
    
        if (term >= 500000)
            break;
    
        total += term;
        counter += 3;
    }
    
    printf("%d\n", total);
    return 0;
    

    编辑:刚刚意识到这是一年前发布的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-18
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 2017-07-22
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多