нужно сделать значение a либо b строго больше, чем некоторое данное число ?
нужно сделать значение a либо b строго больше, чем некоторое данное число ?. Нужно вычислить через сколько попыток А или Б превысит число N. если выполнить «a += b», когда a = 2, b = 3, значение a станет равно 5 (значение b при этом не изменится).
t = int(input())
i = 0
while i < t:
data = list(map(int,input().split()))
a = data[0]
b = data[1]
n = data[2]
i += 1
count = 0
while a < n and b < n:
if count % 2 == 1:
a += b
count += 1
if count % 2 == 0:
b += a
count += 1
print(count)
Ответы (2 шт):
Если вопрос в том, как исправить приведённый код - сделать
while a <= n and b <= n:
a += b
b += a
count += 1
поскольку спрашивается строго больше, и count увеличивать один раз за цикл, наверное, нужно.
Или так, если считать все действия:
while b <= n:
a += b
count += 1
if a > n:
break
b += a
count += 1
Если вопрос в оптимизации - нужно присмотреться, какие значения принимают a и b после K попыток. А эти значения выражаются формулами
ak = F(k)*a0 + F(k+1)*b0
bk = F(k+1)*a0 + F(k+2)*b0
где F() - числа Фибоначчи.
Решив целочисленное уравнение (точнее, неравенство) или использовав бинарный поиск, можно найти количество итераций.
для начала вот это
data = list(map(int,input().split()))
a = data[0]
b = data[1]
n = data[2]
можно схлопнуть вот в это:
a, b, n = map(int,input().split())
во-вторых вся эта конструкция
t = int(input())
i = 0
while i < t:
похоже нужна только для
for i in range(int(input())):
теперь о самом алгоритме:
у вас в условии написано
сделать значение a либо b строго больше, чем некоторое данное число ?
значит требуется не
while a < n and b < n:
а
while a <= n and b <= n:
далее смотрите что происходит в вашем коде:
if count % 2 == 1:
a += b
count += 1
if count % 2 == 0:
b += a
count += 1
если count нечётный то count увеличивается на 1 и становится четным... а дальше опять вы проверяете уже на чётность!!! - в итоге ошибка в логика
надо сделать ВЗАИМОИСКЛЮЧАЮЩИЕ ПРОВЕРКИ
if count % 2 == 1:
a += b
count += 1
else:
b += a
count += 1
и все, но компактнее записать так:
if count % 2 == 1:
a += b
else:
b += a
count += 1