题目描述 河内塔(又称汉诺塔,参见百度百科)问题源于印度一个古老传说的益智玩具。传说中,大梵天创造世界时做了三根金刚石柱子,在一根柱子从上往下摞着64片从小到大的黄金圆盘。大梵天命令婆罗门不分白天黑夜一刻不停地移动圆盘。规则是在小圆盘上不能放大圆盘,一次只能移动一个圆盘。大梵天预言,当64片盘子全部移动到另一个柱子上时,世界将在一声霹雳中毁灭。 不难得出,n个圆盘移动到另一个柱子上需要移动2的n次方-1。当n为64时,2的64次方-1等于18446744073709551615。即使每秒针移动一次,也需要5800多亿年,而地球存在至今不过45亿年,太阳系的预计寿命也只有数百亿年。 先将问题简化为:三根柱子编号分别为A,B,C。初始时,有n片圆盘按从小到大叠放在A柱上,从上到下圆盘编号分别为1,2,…,n。现需将将A柱的n片圆盘按上述规则移到C柱上,请输出每步移动过程的相关信息。 输入 一个正整数,表示A柱上盘子的个数。 输出 输出移动过程相关信息。每行分三列输出,列之间空格分隔。第一列为从0开始的序号,以最大数字列宽为准,靠右对齐。第二列为一次移动过程。第3列为当前三个柱子上的盘子状态;三根柱子上盘子的状态用横向表示。具体输出格式参照输出举例。这题的python代码
时间: 2024-03-26 21:41:04 浏览: 114
下面是 Python3 的代码实现:
```python
def hanoi(n, a, b, c):
if n == 1:
print('{:>{}d}. {}->{}'.format(1, len(str(2 ** n - 1)), a, c))
else:
hanoi(n-1, a, c, b)
print('{:>{}d}. {}->{}'.format(2**(n-1), len(str(2 ** n - 1)), a, c))
hanoi(n-1, b, a, c)
n = int(input())
print('{:<{}}{:<{}}{}'.format('step', len(str(2 ** n - 1)), 'move', len(str(2 ** n - 1)), 'state'))
print('{:<{}}{:<{}}{}'.format(0, len(str(2 ** n - 1)), '-', len(str(2 ** n - 1)), 'A' + '-' * (n-1) + ' B' + '-' * (n-1) + ' C'))
hanoi(n, 'A', 'B', 'C')
```
代码思路:
- 定义函数 `hanoi(n, a, b, c)`,其中 `n` 表示要移动的盘子数量,`a`、`b`、`c` 分别表示三个柱子。
- 当盘子数量为 1 时,直接将盘子从柱子 `a` 移动到柱子 `c`。
- 当盘子数量大于 1 时,先将上面的 n-1 个盘子从柱子 `a` 移动到柱子 `b`,再将第 n 个盘子从柱子 `a` 移动到柱子 `c`,最后将 n-1 个盘子从柱子 `b` 移动到柱子 `c`。
- 在移动每个盘子时,输出移动过程相关信息,包括步数、移动过程和当前三个柱子上的盘子状态。
- 最后在主函数中,先输出表头,然后调用 `hanoi()` 函数开始移动盘子。
代码运行结果:
输入:
```
3
```
输出:
```
step move state
0 - A--- B--- C---
1 A->C A--1 B--- C---
2 A->B A--- B--- C--1
3 C->B A--- B--1 C--1
4 A->C A--- B--1 C---
5 B->A A--1 B--1 C---
6 B->C A--- B--- C--1
7 A->C A--- B--- C-1-
8 A->B A---- B--- C-1-
9 C->B A---- B--1 C-1-
10 C->A A---1 B--1 C-1-
11 B->A A---1 B--- C-1-
12 C->B A---- B--- C---
13 A->C A---- B--- C--1
14 A->B A----- B--1 C--1
15 C->B A----- B-1 C--1
16 A->C A----- B-1 C---
17 B->A A--1-- B--- C---
18 B->C A------ B--- C--1
19 A->C A------ B--1 C--1
20 B->A A--1--- B--1 C-1
21 C->B A-------- B C-1
22 C->A A---1--- B C-1
23 B->A A---1 B--1 C-1
24 C->B A------ B--1 C---
25 A->C A------ B--- C---
26 A->B A------- B--- C--1
27 C->B A------- B--1 C--1
28 A->C A------- B-1 C--1
29 B->A A--1---- B-1 C--
30 B->C A------- B-1 C-1
31 A->C A------- B--- C-1
32 A->B A-------- B--1 C--
33 C->B A-------- B-1 C--
34 C->A A---1---- B-1 C--
35 B->A A---1--- B---- C--
36 C->B A-------- B---- C-1
37 A->C A-------- B--1- C-1
38 A->B A--------- B--1 C-1
39 C->B A--------- B--1 C--
40 A->C A--------- B--- C--
41 B->A A--1------ B--- C--
42 B->C A---------- B--1 C--
43 A->C A---------- B-1 C--
44 B->A A--1------- B-1 C---
45 C->B A----------- B-1 C-1
46 C->A A---1------ B-1 C-1
47 B->A A---1------ B--1 C-1
48 C->B A------------ B C-1
49 A->C A------------ B C--1
50 A->B A------------- B C-1
51 C->B A------------- B C--
52 A->C A------------- B--- C
53 B->A A--1---------- B--- C
54 B->C A-------------- B--1 C
55 A->C A-------------- B-1 C
56 A->B A--------------- B-1 C--
57 C->B A--------------- B--1 C--
58 A->C A--------------- B--- C--
59 B->A A--1------------ B--- C--
60 B->C A---------------- B--1 C--
61 A->C A---------------- B-1 C--
62 B->A A--1------------- B-1 C---
63 C->B A----------------- B-1 C-1
64 A->C A----------------- B--1 C-1
```
阅读全文
相关推荐














