@dmitrylogvinov

Номер числа Фибоначчи?

Coursera не принимает решение.

Условие задачи:
Дано натуральное число A. Определите, каким по счету числом Фибоначчи оно является,то есть выведите такое число n, чтоF[n]=A
Если А не является числом Фибоначчи,выведите число -1
-1
Примеры:
Тест 1
Входные данные: 8
Вывод программы: 6

Тест 2
Входные данные: 10
Вывод программы: -1

Тест 3
Входные данные: 13
Вывод программы: 7

Не могу найти ошибку

n = int(input())
f = 0
res = 1
f0 = 1
i = 0
while i < n:
    res = f
    f = f0 + f
    f0 = res
    i += 1
    if n == f:
        print(i)
        break
if n < 0 or n != f:
    print(-1)
elif n == 0:
    print(0)
  • Вопрос задан
  • 9180 просмотров
Решения вопроса 1
@fireSparrow
Здесь
while i < n:
Должно быть
while f <= n:

А после цикла проверяйте только n==0, а второй проверки не нужно, во всех остальных случаях возвращайте -1.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Astrohas
@Astrohas
Python/Django Developer
но мне больше нравится этот варант
def get_fib_ind(n):
    ind = 0
    a, b = 0, 1
    while b <= n:
        ind += 1
        a, b = b, a+b
        if a == n:
            return ind
    return -1
    
print(
    get_fib_ind(
        int(input())
    )
)
Ответ написан
Комментировать
@red-barbarian
n это число на проверку т. е. по условию А которое вводится пользователем, а вы в цикле сравниваете его с порядковым номером i.
n нужно сравнивать с числами фиэбоначчи
Ответ написан
Комментировать
@pittanova
Если номер числа A=1 принимать за n=2 (хотя единица - это и первое и второе число в последовательности Фибоначчи), то:
a = int(input())
fib_1 = 0
fib_2 = 1
fib_summ = 1
n = 0
res = -1
while fib_1 <= a:
    fib_summ = fib_1 + fib_2
    fib_1 = fib_2
    fib_2 = fib_summ
    n += 1
    if fib_1 == a:
        res = n
    elif a == 0:
        res = 0
print(res)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы