Вопрос задан 01.09.2026 в 14:53.
Предмет Информатика.
Спрашивает Каримов Даниль.
Задача на C++: Ханойские башни.
Головоломка «Ханойские башни» состоит из трёх стержней, пронумерованных числами 1, 2, 3. На стержень 1 надета пирамидка из n дисков различного диаметра в порядке возрастания диаметра дисков, если рассматривать их сверху вниз. Диски можно перекладывать с одного стержня на другой по одному, при этом диск нельзя класть на диск меньшего диаметра. Необходимо переложить всю пирамидку со стержня 1 на стержень 3, используя стержень 2 как вспомогательный, за минимальное число перекладываний.
Напишите функцию, которая решает головоломку: для данного числа дисков n печатает последовательность перекладываний в формате a b c, где a — номер перекладываемого диска, b — номер стержня, с которого снимается данный диск, c — номер стержня, на который надевается данный диск.
Например, строка 1 2 3 означает перемещение диска номер 1 со стержня 2 на стержень 3. В одной строке печатается одна команда. Диски пронумерованы числами от 1 до n в порядке возрастания диаметров.
Входные данные: Задано натуральное число n ≤ 10 — размер пирамидки.
Выходные данные: Программа должна вывести минимальный (по количеству произведённых операций) способ перекладывания пирамидки из данного числа дисков.
Примеры:
Ввод: 3
Вывод:
1 1 3
2 1 2
1 3 2
3 1 3
1 2 1
2 2 3
1 1 3
Ответы на вопрос
Отвечает Байгузин Карим.
Задача решается рекурсией. Чтобы переложить \( n \) дисков со стержня \( from \) на стержень \( to \), нужно:
- переложить \( n - 1 \) верхних дисков на вспомогательный стержень;
- переложить самый большой диск \( n \) на нужный стержень;
- переложить \( n - 1 \) дисков со вспомогательного стержня на нужный.
Минимальное число ходов равно \( 2^n - 1 \).
Код на C++:
#include <iostream>
using namespace std;
void hanoi(int n, int from, int to, int aux) {
if (n == 0) return;
hanoi(n - 1, from, aux, to);
cout << n << ' ' << from << ' ' << to << '\n';
hanoi(n - 1, aux, to, from);
}
int main() {
int n;
cin >> n;
hanoi(n, 1, 3, 2);
return 0;
}
Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili

