python实现汉诺塔问题,输入格式如下: [step %d] move plate %d# from %c to %c,每一步前要有序号
时间: 2023-06-16 14:04:19 浏览: 89
好的,下面是Python实现汉诺塔问题的代码:
```python
def hanoi(n, a, b, c):
if n == 1:
print("[step 1] move plate 1 from {} to {}".format(a, c))
else:
hanoi(n-1, a, c, b)
print("[step {}] move plate {} from {} to {}".format(n, n, a, c))
hanoi(n-1, b, a, c)
n = int(input("请输入汉诺塔的层数:"))
hanoi(n, 'A', 'B', 'C')
```
输入格式为:
```
请输入汉诺塔的层数:3
```
输出格式为:
```
[step 1] move plate 1 from A to C
[step 2] move plate 2 from A to B
[step 3] move plate 1 from C to B
[step 4] move plate 3 from A to C
[step 5] move plate 1 from B to A
[step 6] move plate 2 from B to C
[step 7] move plate 1 from A to C
```
相关问题
用c语言 编程求解汉诺塔问题。 汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题。它来自于印度神话。上帝创造世界时作了三根金刚石柱子,在第一根柱子上从下往上按大小顺序摞着64片黄金圆盘,如图7-3所示。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放到第二根柱子上,并且规定,每次只能移动一个圆盘,在小圆盘上不能放大圆盘。有人预言说,这件事完成时宇宙会在一瞬间闪电式毁灭,也有人相信婆罗门至今仍在一刻不停地搬动着圆盘。 **输入格式要求:"%d" 提示信息:"Input the number of disks:" **输出格式要求:"Steps of moving %d disks from A to B by means of C:\n" "Move %d: from %c to %c\n" 程序运行示例如下: Input the number of disks:3 Steps of moving 3 disks from A to B by means of C: Move 1: from A to B Move 2: from A to C Move 1: from B to C Move 3: from A to B Move 1: from C to A Move 2: from C to B Move 1: from A to B
以下是用C语言实现的汉诺塔问题求解程序:
```c
#include <stdio.h>
void hanoi(int n, char A, char B, char C) {
if(n == 1) {
printf("Move 1: from %c to %c\n", A, B);
} else {
hanoi(n-1, A, C, B);
printf("Move %d: from %c to %c\n", n, A, B);
hanoi(n-1, C, B, A);
}
}
int main() {
int n;
printf("Input the number of disks:");
scanf("%d", &n);
printf("Steps of moving %d disks from A to B by means of C:\n", n);
hanoi(n, 'A', 'B', 'C');
return 0;
}
```
程序运行示例:
```
Input the number of disks:3
Steps of moving 3 disks from A to B by means of C:
Move 1: from A to B
Move 2: from A to C
Move 1: from B to C
Move 3: from A to B
Move 1: from C to A
Move 2: from C to B
Move 1: from A to B
```
定义函数解决汉诺塔问题:将A柱上的盘子通过B柱移动到C柱子,在main函数中输入汉诺塔盘子数n,输出移动路径。输出格式:"%c->%c " c语言代码
以下是C语言代码:
```c
#include <stdio.h>
void hanoi(int n, char A, char B, char C) {
if (n == 1) {
printf("%c->%c ", A, C);
} else {
hanoi(n - 1, A, C, B);
hanoi(1, A, B, C);
hanoi(n - 1, B, A, C);
}
}
int main() {
int n;
printf("请输入汉诺塔盘子数n:");
scanf("%d", &n);
printf("移动路径为:");
hanoi(n, 'A', 'B', 'C');
printf("\n");
return 0;
}
```
函数 `hanoi` 是递归实现汉诺塔问题的函数,参数 `n` 表示要移动的盘子数,参数 `A`、`B`、`C` 分别表示三个柱子。当 `n` 等于 1 时,直接将盘子从 A 柱移动到 C 柱;否则,先将 `n-1` 个盘子从 A 柱通过 C 柱移动到 B 柱,再将最后一个盘子从 A 柱移动到 C 柱,最后将 B 柱上的 `n-1` 个盘子通过 A 柱移动到 C 柱。主函数中先输入盘子数 `n`,然后调用 `hanoi` 函数输出移动路径。
阅读全文