Как правильно решить данную задачу на 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 шт):

Автор решения: GrAnd

Вообще-то решение проще некуда: 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)
→ Ссылка