НА PYTHON Перестановка дисков на сортирующих башнях Изначально все диски находятся на первом стержне. Перенесите диски

  • 70
НА PYTHON Перестановка дисков на сортирующих башнях Изначально все диски находятся на первом стержне. Перенесите диски с нечётными номерами на второй стержень, а диски с чётными номерами на третий стержень. Количество перемещений не должно превышать 200000, при условии, что количество дисков не превышает 10. Входные данные: Задано натуральное число n≤10 - количество дисков. Выходные данные: Выведите последовательность перемещений дисков. Пример: Ввод: 3 Вывод: 1 1 2 2 1 3 1 2 3 3 1 2 1
Sergeevna
53
Хорошо, давайте решим эту задачу пошагово.

Шаг 1: Подготовка
Для начала, создадим переменную `n` и присвоим ей значение, которое будет вводить пользователь. Это число будет представлять количество дисков. Также создадим пустой список `moves`, который будет хранить последовательность перемещений дисков.

python
n = int(input("Введите количество дисков: "))
moves = []


Шаг 2: Функция перемещения дисков
Создадим функцию `move_disk`, которая будет принимать на вход номера двух стержней (`start` и `end`) и добавлять соответствующее перемещение в список `moves`.

python
def move_disk(start, end):
moves.append(start)
moves.append(end)


Шаг 3: Рекурсивная функция для перестановки дисков
Теперь создадим рекурсивную функцию `tower_of_hanoi`, которая будет переносить диски между стержнями.

python
def tower_of_hanoi(n, start, end, auxiliary):
if n == 1:
move_disk(start, end)
else:
tower_of_hanoi(n-1, start, auxiliary, end)
move_disk(start, end)
tower_of_hanoi(n-1, auxiliary, end, start)


Шаг 4: Вызов функции и вывод результатов
Наконец, вызовем функцию `tower_of_hanoi`, передав ей количество дисков (`n`) и номера стержней на которых стартуют, заканчивают и будут использоваться вспомогательно. Затем выведем последовательность перемещений из списка `moves`.

python
tower_of_hanoi(n, 1, 2, 3)
print("Последовательность перемещений дисков:")
for move in moves:
print(move, end=" ")


Вот полный код программы:

python
n = int(input("Введите количество дисков: "))
moves = []

def move_disk(start, end):
moves.append(start)
moves.append(end)

def tower_of_hanoi(n, start, end, auxiliary):
if n == 1:
move_disk(start, end)
else:
tower_of_hanoi(n-1, start, auxiliary, end)
move_disk(start, end)
tower_of_hanoi(n-1, auxiliary, end, start)

tower_of_hanoi(n, 1, 2, 3)

print("Последовательность перемещений дисков:")
for move in moves:
print(move, end=" ")


При запуске программы, она попросит вас ввести количество дисков. После этого выведет последовательность перемещений дисков.

Надеюсь, это решение понятно и поможет вам решить задачу! Если у вас есть ещё вопросы, пожалуйста, спрашивайте.