Re: Обезьяна с бананами
От: assur  
Дата: 05.04.10 13:31
Оценка:
Вот так получится 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.