c语言*汉诺塔问题是一个著名的问题,初始模型如图所示。其来源据说是在约19世纪末欧洲的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆自上而下、由小到大顺序串着64个圆盘构成的塔,游戏的目的是将最左边A杆上的圆盘,借助最右边的C杆,全部移动到中间的B杆上,条件是一次仅能移动一个盘,且不允许大盘放在小盘的上面。**输入格式要求:"%d" 提示信息:"Please enter the number of discs:" **输出格式要求:"\tTotal:%d\n" "%2d-(%2d):%c==>%c\n"
时间: 2023-12-03 22:46:51 浏览: 124
C语言实现汉诺塔游戏
以下是C语言的解法:
```
#include <stdio.h>
void hanoi(int n, char a, char b, char c, int *total);
int main() {
int n, total = 0;
printf("Please enter the number of discs: ");
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C', &total);
printf("\tTotal: %d\n", total);
return 0;
}
void hanoi(int n, char a, char b, char c, int *total) {
if (n == 1) {
printf("%2d-(%2d): %c ==> %c\n", n, ++(*total), a, c);
} else {
hanoi(n - 1, a, c, b, total);
printf("%2d-(%2d): %c ==> %c\n", n, ++(*total), a, c);
hanoi(n - 1, b, a, c, total);
}
}
```
解释如下:
首先在 `main` 函数中获取用户输入的盘子数量 `n`,并将总步数 `total` 初始化为 0。
接着调用 `hanoi` 函数,传入初始杆子 A、中间杆子 B、目标杆子 C,以及指向 `total` 的指针。
在 `hanoi` 函数中,如果当前盘子数量为 1,则直接将盘子从 A 移动到 C,并输出移动过程。否则,先将上面的 `n-1` 个盘子从 A 借助 C 移动到 B,再将最下面的盘子从 A 移动到 C,最后将 B 上的所有盘子借助 A 移动到 C。
在输出移动过程时,按照题目要求格式输出,同时将 `total` 增加 1。
最后在 `main` 函数中输出总步数即可。
阅读全文