Какой алгоритм используется в задаче про лестницу?
Имеется бесконечная лестница, для преодоления 1 ступени требуется 1 энергия. С её подножья начинают своё движение 3 тела под номерами 4, 5, 6 тела с количеством энергии в сутки 4, 5, 6 соответственно. Каждое тело за сутки стремится пройти максимальное количество ступеней х, х-целое, неотрицательное, >=4, кратное 4, движение происходит лишь вперед, излишки энергии переходят на следующий день. Необходимо записать номер тела каждый раз, когда оно доходит до ступени кратной 4. С помощью какого алгоритма можно записать данную последовательность? Первые члены последовательности: 6546564.
Номера и энергия одинаковые для того, чтобы переменные содержащие номера тел и энергии были одни и те же, то есть b=2 -это и энергия и номер тела в последовательности.
Извините, но у вас в ответе последовательность наоборот и Ваш алгоритм не учитывает скорость тел, так как последовательность 65465, а у вас 65466, то есть в последовательности 5 тело раньше придет к ступени кратной 4, чем 6 тело
1Danshin1, по текущим условиям задачи нет никакого различия между порядком записи этих тел в пределах дня, только то, сколько они могут пройти за день.
Записанная в примере последовательность "654" никак не соотносится с условиями задачи, это только обозначение, что все 3 за день прошли 1 отрезок в 4 ступени. Ее можно записать хоть 456, хоть 465, в условиях задачи нет никакого описания, почему вдруг 6 должно идти первым.
Если такое требование нужно, стоило тогда в задаче явно описать, что дело не только в 456 энергии в сутки, а в том, мы сравниваем скорости постепенного заполнения энергии этих тел, как 4/x 5/x 6/x
1Danshin1, Если исходить из постоянной скорости накопления энергии, можно исходя из скорости каждого тела проверять через определенные промежутки, когда накопится достаточно, чтобы можно было потратить 4 энергии. В качестве периода проверки в данном случае взял 60 как наименьшее общее кратное этих 3-х чисел.
a = [4,5,6]
i = 1
# цикл произвольно ограничен для теста
while i < 200:
for x in a:
if i*x/60%1 == 0:
print(x, end='')
i += 1
Получаем
654654656456456654654656456456654654656456456654
что соответствует примеру в задаче (расхождение может быть в моменты, когда несколько тел накапливают энергию одновременно, на этот случай фактически они равны по времени).
Решение выглядит не особо красивым, но навскидку ничего лучше не придумалось, а условию удовлетворяет. Может по похожему принципу что-то лучше придумаете.