【问题标题】:The number of Fibonacci numbers lesser than a given n小于给定 n 的斐波那契数
【发布时间】:2016-03-01 18:47:27
【问题描述】:
#include <stdio.h>

int fibonacci(int n) {
    int count, n1 = 0, n2 = 1, fib = 0;
    printf("Given number: ");
    scanf("%d", &n);
    count = 0;
    while (count < n) {
        fib = n1 + n2;
        n1 = n2;
        n2 = fib;
        ++count;
        if (n > fib)
            printf("%d ", fib);
    }
    return 0;
}

int main() {
    int szam;
    fibonacci(szam);
    return 0;
}

我已经走到这一步了,我只是不知道如何计算数字。 例如:
输入:10
输出:1 2 3 5 8

但它应该是:
在:10
输出:5

【问题讨论】:

  • 你的标题是错误的。您是指小于 N 的斐波那契数吗?
  • 也许在循环之后打印count,而不是在循环内打印fib
  • 提示:斐波那契数增长非常快。如果 N 的范围是有界的,则使用它。
  • 如果我在循环后打印计数,我只会得到给定的数字
  • @TamásSándor 每次您在循环中printf() 时,您的数字计数都会增加......所以增加一个新的计数器而不是在那里调用printf()(并调用@987654330 @ 之后显示新的计数器)

标签: c count fibonacci


【解决方案1】:

您的代码中的停止条件不正确:您在计算出n 斐波那契数之后停止,而不是在您计算出大于n 的斐波那契数时停止。

这是一个更正的版本:

#include <stdio.h>
int count_fibonacci(unsigned long long int n) {
    int count = 0;
    unsigned long long n1 = 1, n2 = 1, fib = 1;
    while (fib < n) {
        count++;
        fib = n1 + n2;
        n1 = n2;
        n2 = fib;
    }
    return count;
}

int main(void) {
    unsigned long long n = 0;
    printf("Given number: ");
    scanf("%llu", &n);
    printf("%d\n", count_fibonacci(n));
    return 0;
}

对于10 的输入,它会打印5,因为您的斐波那契数列是:1 2 3 5 8...

但标准序列通常定义为1 1 2 3 5 8...,它应该返回6。您可以通过将初始状态更改为 n1 = 0, n2 = 1, fib = 1 来获得此行为。

【讨论】:

    【解决方案2】:

    添加了计算斐波那契数的变量fib_count(没有测试这个...)

    #include <stdio.h>
    
    int fibonacci(int n)
    {
      int n1=0, n2=1, fib=0, fib_count;
      printf("Given number: ");
      scanf("%d",&n);
      fib_count = 0;
      while (fib<n)
      {`
    
          fib=n1+n2;
          n1=n2;
          n2=fib;
          fib_count += 1;
          printf("%d ",fib);
    
      }
      printf("Fibonacci numbers smaller than %d : %d ",n, fib_count);
      return 0;
    }
    
    int main(){
    int szam;
    fibonacci(szam);
    return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-10
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      相关资源
      最近更新 更多