Вот так получится 141 банан:
100 1000
99.5 990
99.0 980
98.5 971
98.0 961
...
2.0 147
1.5 146
1.0 144
0.5 143
0.0 141
# -*- coding: windows-1251 -*-
class Monkey:
def __init__(self, POS):
self.POS = POS # позиция обезьяны от конечной точки
self.RESOURCE = 0 # оставшийся ресурс в километрах
def doStep(self, N, step):
""""
Делает шаг на step км
N - число бананов cлева
возвращает число бананов справа
"""
left = N # левая куча
right = 0 # правая куча
oneTransfer = 100 # сколько можно перенести за раз
while (left>0):
# Подкрепляемся в исходной точке если это необходимо
if (self.RESOURCE<1):
left -= 1 # вполне можно съесть один банан даже если в желудке осталось пол-банана
self.RESOURCE += 1
if (left>oneTransfer):
# цикл с возвращением в исходную точку
self.RESOURCE -= step*2 # находили 1 км
right += oneTransfer # перенесли 100 бананов
left -= oneTransfer # слева осталось на 100 меньше
else:
right += left # справа прибавилось
left = 0 # слева ничего не осталось
self.RESOURCE -= step # находили 0.5Км
self.POS -= step # стали ближе к цели на 0.5км
return right
monkey = Monkey(100)
N = 1000
while (monkey.POS>0):
print monkey.POS, N
N = monkey.doStep(N, 0.5)
print monkey.POS, N