Я написал код для решения головоломки «Ханойские башни», но мне нужна помощь в форматировании выходных данных для печати 2-го представления каждого хода.Я знаю, что мне нужно использовать стеки для решения этой проблемы, но я не уверен, как это сделать.Может кто-нибудь помочь мне найти решение этой проблемы?
Информация о проекте:
"В этом проекте вы передадите количество дисков (не более15) в качестве аргумента, затем отобразите пошаговые шаги в строгом соответствии с приведенной ниже спецификацией.
Каждый стержень должен отображаться с шириной в 31 пробел, а затем с 5 пробелами после каждого стержня. Отображение стержня должно выполняться с помощью |посередине высота должна быть равна количеству дисков. Каждый диск должен быть размещен на стержне, с правильной шириной, чтобы отразить размер диска. Самый маленький диск должен быть показан в виде двух черточек (по одной на каждой сторонестержень), второй наименьший диск должен отображаться в виде 4 штрихов (по 2 на каждой стороне стержня) и т. д. Возможные наибольшие диски должны отображаться в виде 15 штрихов на каждой стороне стержня.стержень к другому стержню, размер должен оставаться неизменным.
Например, если имеется 5 дисков, они должны быть показаны на стержне так:
@@@@@@@@@@@@@@_|_@@@@@@@@@@@@@@&&&&&
@@@@@@@@@@@@@__|__@@@@@@@@@@@@@&&&&&
@@@@@@@@@@@@___|___@@@@@@@@@@@@&&&&&
@@@@@@@@@@@____|____@@@@@@@@@@@&&&&&
@@@@@@@@@@_____|_____@@@@@@@@@@&&&&&
1
- 5 столбцов (|) представляют стержень _ представляет диск.
- @ и & представляют пробелы.
- @ представляет пространство до и после диска.Если диск самый большой, на обоих концах не будет @.
- & представляет пространство после стержней.
- Число под стержнем - номер стержня: 1, 2 или 3. "
Мой код:
#include <stdio.h>
#include <stdlib.h>
int step = 1; //Global variable
void solver(int size, char fromRod, char toRod, char extraRod); //Prototyping functionx
int main(int argc, char *argv[]) { //Main function
int size, step = 1, i, j, k, width = 1; //Declaring variables
if(argc <= 1) { //Displays error if there is a missing line on the command
printf("Missing command line argument.\n");
printf("Usage: ./hanoi numberOfDisks\n");
exit(1);
}
size = atoi(argv[1]); //Finding size of puzzle from user input
if (size > 15 || size < 2) { //If the size is too big or too small displays an error
printf("Invalid input. Size should be between 1 and 15.\n");
return -1;
}
char setA[size + 1][31], setB[size + 1][31], setC[size + 1][31]; //Tower number only on last row
solver(size, '1', '3', '2'); //Calls solver function
return 0;
}
void solver(int size, char fromRod, char toRod, char extraRod) { //Solver function
if (size == 1) { //If size is 1
printf("%d: Move top disk from %c --> %c\n", step, fromRod, toRod); //Prints step number and instructions
return;
}
solver(size - 1, fromRod, extraRod, toRod); //Recursive statement
step++; //Increments the number of steps
printf("%d: Move top disk from %c --> %c\n", step, fromRod, toRod);
step++;
solver(size - 1, extraRod, toRod, fromRod);
}
Пример вывода с использованием размера 3:
| | |
__|__ | |
___|___ _|_ |
1 2 3
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2: move top disk from 1 --> 3
Кроме того, у меня есть пошаговые инструкции, которые правильно выводятся через функцию решателя.Форматированный вывод является большой проблемой здесь.