
На С++!! 20 БАЛЛОВ!!! Ханойские башни Головоломка “Ханойские башни” состоит из трёх стержней,
пронумерованных числами 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 32 1 21 3 23 1 31 2 12 2 31 1 3Вот код, нужно его доделать:void hanoi(int n, int f, int t) { if (n == 0) { return; } int v = 6 - f - t; hanoi(n - 1, f, v); cout << n << " " << f << " " << t << endl; hanoi(n - 1, v, t);}

Ответы на вопрос

Ответ:
#include <iostream>
#include<vector>
using namespace std;
void hanoi(int n, int f, int t) {
if (n == 0) {
return;
}
int v = 6 - f - t;
hanoi(n - 1, f, v);
cout << n << " " << f << " " << t << endl;
hanoi(n - 1, v, t);
}
int main(){
int n ;
cin >> n ;
hanoi(n, 1 ,3);
return 0;
}
Объяснение:



Для решения головоломки "Ханойские башни" с использованием функции hanoi
, вы можете оставить вашу функцию hanoi без изменений, но вызывать ее с правильными параметрами, чтобы записать последовательность действий. Для этого вам нужно будет модифицировать функцию так, чтобы она принимала еще один параметр - поток вывода (например, ostream& out
), в который вы будете выводить последовательность действий. Вот доработанный код:
cpp#include <iostream>
using namespace std;
void hanoi(int n, int f, int t, ostream& out) {
if (n == 0) {
return;
}
int v = 6 - f - t;
hanoi(n - 1, f, v, out);
out << n << " " << f << " " << t << endl;
hanoi(n - 1, v, t, out);
}
int main() {
int n;
cin >> n;
// Открываем файл для вывода последовательности действий
ofstream outputFile("hanoi_output.txt");
// Вызываем функцию hanoi с потоком вывода
hanoi(n, 1, 3, outputFile);
// Закрываем файл
outputFile.close();
return 0;
}
Этот код сначала открывает файл "hanoi_output.txt" для записи последовательности действий. Затем он вызывает функцию hanoi
с этим файлом вместо стандартного вывода. После завершения работы функции, файл закрывается.
После выполнения программы, вы найдете последовательность действий в файле "hanoi_output.txt".


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili