diff --git "a/exercises/liuxin/\347\256\200\345\215\225/\346\261\211\350\257\272\345\241\224/1.in" "b/exercises/liuxin/\347\256\200\345\215\225/\346\261\211\350\257\272\345\241\224/1.in" new file mode 100644 index 0000000000000000000000000000000000000000..e440e5c842586965a7fb77deda2eca68612b1f53 --- /dev/null +++ "b/exercises/liuxin/\347\256\200\345\215\225/\346\261\211\350\257\272\345\241\224/1.in" @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git "a/exercises/liuxin/\347\256\200\345\215\225/\346\261\211\350\257\272\345\241\224/2.in" "b/exercises/liuxin/\347\256\200\345\215\225/\346\261\211\350\257\272\345\241\224/2.in" new file mode 100644 index 0000000000000000000000000000000000000000..7813681f5b41c028345ca62a2be376bae70b7f61 --- /dev/null +++ "b/exercises/liuxin/\347\256\200\345\215\225/\346\261\211\350\257\272\345\241\224/2.in" @@ -0,0 +1 @@ +5 \ No newline at end of file diff --git "a/exercises/liuxin/\347\256\200\345\215\225/\346\261\211\350\257\272\345\241\224/3.in" "b/exercises/liuxin/\347\256\200\345\215\225/\346\261\211\350\257\272\345\241\224/3.in" new file mode 100644 index 0000000000000000000000000000000000000000..56a6051ca2b02b04ef92d5150c9ef600403cb1de --- /dev/null +++ "b/exercises/liuxin/\347\256\200\345\215\225/\346\261\211\350\257\272\345\241\224/3.in" @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git "a/exercises/liuxin/\347\256\200\345\215\225/\346\261\211\350\257\272\345\241\224/exercises.md" "b/exercises/liuxin/\347\256\200\345\215\225/\346\261\211\350\257\272\345\241\224/exercises.md" new file mode 100644 index 0000000000000000000000000000000000000000..669c3d6065ec36a6f3479363722e7adc470ea6ba --- /dev/null +++ "b/exercises/liuxin/\347\256\200\345\215\225/\346\261\211\350\257\272\345\241\224/exercises.md" @@ -0,0 +1,38 @@ +# 汉诺塔 + +定义:汉诺塔 (Tower of Hanoi)是根据一个传说形成的数学问题: + +有三根杆子A,B,C。A杆上有 N 个 (N>1) 穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至 C 杆: + +1. 每次只能移动一个圆盘; +2. 大盘不能叠在小盘上面。 +3. 为简单起见,我们限定不超过10个盘子 + +问题:如何移?最少要移动多少次? + +## 输入描述 + +输入塔的层数 + +## 输出描述 + +逐行输出每一个移动步骤。最后一行输出执行了多少步 + +## 输入样例 + +3 + +## 输出样例 + +A -> C +A -> B +C -> B +A -> C +B -> A +B -> C +A -> C +7 times + +## 提示 + +可将圆盘临时置于 B 杆,也可将从 A 杆移出的圆盘重新移回 A 杆,但都必须遵循上述两条规则。 diff --git "a/exercises/liuxin/\347\256\200\345\215\225/\346\261\211\350\257\272\345\241\224/hanoi.py" "b/exercises/liuxin/\347\256\200\345\215\225/\346\261\211\350\257\272\345\241\224/hanoi.py" new file mode 100644 index 0000000000000000000000000000000000000000..003c539fcfcb9b7e5aa4c48e8bf6c413aa1c9f6f --- /dev/null +++ "b/exercises/liuxin/\347\256\200\345\215\225/\346\261\211\350\257\272\345\241\224/hanoi.py" @@ -0,0 +1,13 @@ +def hanoi(n, a, b, c): + if n == 1: + print(a, ' -> ', c) + else: + hanoi(n - 1, a, c, b) + hanoi(1, a, b, c) + hanoi(n - 1, b, a, c) + + +if __name__ == '__main__': + levels = int(input("dash count:")) + hanoi(levels, 'A', 'B', 'C') + print(2**levels-1, " times")