Я пишу код для Ханойских Башен для решения домашней задачи в моем классе от вступления к букве C. У меня есть действующая программа, но в качестве дополнения я хотел бы, чтобы код распечатывал количество выполненных шагов, т. Е. «Общее количество шагов - 31». Затем я хочу сравнить их с теоретическим количеством шагов (например, steps = (2^n)-1
, где n
- количество дисков) и быть в состоянии убедиться, что программа работает правильно для больших значений n
.
До сих пор я был в состоянии реализовать код для распечатки ожидаемого количества необходимых шагов, но я не уверен, как поступить в консоль, чтобы распечатать фактическое количество шагов.
void towers(int, char, char, char);
int main()
{
int n;
printf("Number of disks:");
scanf("%d", &n);
int result = (pow(2,n)-1);
printf("\nExpected number of moves required is %d", result);
towers(n, 'A', 'C', 'B'); //moving n disks from A to C using B as the intermediate
return 0;
}
result вызывает функцию power и возвращается к ожидаемому количеству шагов перед запуском функции Towers.
void towers(int n, char from_peg, char to_peg, char other_peg)
{
if (n == 1) //breaking condition
{
printf("\n Move disk 1 from peg %c to peg %c", from_peg, to_peg);
return;
}
towers(n-1, from_peg, other_peg, to_peg); //moving n-1 disks from A to B using C as the intermediate
printf("\n Move disk %d from peg %c to peg %c", n, from_peg, to_peg);
towers(n-1,other_peg,to_peg,from_peg); //moving n-1 disks from B to C using A as the intermediate
}
Цикл возвращает решение для головоломки башни, печатая движение каждый раз.
В идеале я хотел бы, чтобы после того, как цикл полностью указывал «Общее количество требуемых ходов (количество шагов)», нужно выполнить несколько строк, а затем сравнить ожидаемый результат с фактическим результатом (т.е. expected step number == actual step number
это правда).