Как правильно решить данную задачу на Python
Петя и Маша решили сыграть в игру. Изначально у Пети и Маши N и M яблок соответственно. Первым ходом Петя передает одно яблоко Маше. На второй ход Маша отдает Пете 2 яблока. Далее Петя передает Маше 3 яблока, и игра продолжается до тех пор, пока у одного из игроков не заканчиваются яблоки. Формально, на шаге i + 1 получатель яблок из шага i передает второму игроку число яблок, равное переданному числу яблок на шаге i и еще одно.
Напишите программу, которая по заданным N и M вычислит через сколько шагов игра Пети и Маши закончится.
В первой строке подается число N (1 ≤ N ≤ 106) — начальное число яблок у Пети. Во второй строке подается число M (1 ≤ N ≤ 106) — начальное число яблок у Маши.
Выведите одно число — количество ходов, через которое закончится игра.
Допустим, что наши входные данные это 2 и 3 то,
После первого хода: у Пети — 1 яблоко, у Маши — 4.
После второго: у Пети — 3 яблока, у Маши — 2.
После третьего: у Пети — 0 яблок, у Маши — 5.
Игра на этом заканчивается, так как у Пети больше не осталось яблок.
Я попытался это сделать таким образом, но по непонятной мне причине все ломается
a = int(input("Set a = "))
b = int(input("Set b = "))
i = 1
c = 0
while a > 0 or b > 0:
a = a - i
b = b + i
i += 1
c += 1
a = a + i
b = b - i
i += 1
c += 1
print(c)
a и b - это кол-во яблок у Маши и Пети i - это кол-во которое они передают друг другу c - это счетчик ходов
Ответы (1 шт):
Вообще-то решение проще некуда: min(N*2-1, M*2). :)
Но если хотите типа "реально поиграть", то:
N = int(input("Сколько яблок у Пети? "))
M = int(input("Сколько яблок у Маши? "))
i = 0
while N and M:
i += 1
if i % 2: N, M = N-i, M+i # нечётный ход
else: N, M = N+i, M-i # чётный ход
print(f"Игра закончится после {i} ходов.")
Ну или ваш код (исправленный):
a = int(input("Set a = "))
b = int(input("Set b = "))
i = 1
c = 0
while a > 0 and b > 0: # здесь должен быть and
a = a - i
b = b + i
i += 1
c += 1
if a == 0 or b == 0: break # дополнительная проверка на условие конца игры перед каждым вторым ходом (обратной передаче яблок)
a = a + i
b = b - i
i += 1
c += 1
print(c)