2016-03-01 2 views
0
#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Число чисел Фибоначчи меньше заданного n

, но это должно быть:
в: 10
из: 5

+0

Ваше название неправильно. Вы имели в виду число фибоначчи, меньшее, чем N? – Spinach

+2

Возможно, напечатайте 'count' после цикла и не печатайте' fib' внутри цикла? –

+0

Подсказка: числа Фибоначчи растут очень быстро. Используйте его, если диапазон N ограничен. – Spinach

ответ

0

условие останова в коде неправилен: вы перестанете после 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; 
} 

Он печатает 5 для ввода 10, потому что ваша последовательность Фибоначчи: 1 2 3 5 8....

Но стандартная последовательность обычно определяется как 1 1 2 3 5 8..., и она должна возвращать 6. Вы можете получить это поведение bu, изменив начальное состояние на n1 = 0, n2 = 1, fib = 1.

0

Добавлена ​​переменная 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; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^