题目内容:
编写程序解决汉诺塔问题:有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置n个盘子(编号从n至1,即最下面盘子编号为n,最上面盘子编号为1)。目标:把A杆上的盘子全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。提示:编写递归函数解决该问题。
输入格式:
盘子个数n。
输出格式:
每一行输出一个盘子移动的操作,格式为:盘子编号:原杆编号->目标杆编号。
输入样例:
3
输出样例:
1:A->C 2:A->B 1:C->B 3:A->C 1:B->A 2:B->C 1:A->C
时间限制:500ms内存限制:32000kb
代码:
def hanoi(n, A, B, C):
if n == 1:
print("{}:{}->{}".format(n, A,C))
else:
hanoi(n - 1, A, C, B) # 先将A杆上面前n-1个盘子通过C杆移动到B杆
print("{}:{}->{}".format(n, A,C)) # 移动最下面的盘子到C杆(即第n个盘子)
hanoi(n - 1, B, A,C) # 最后将B杆上的n-1个盘子通过A杆移动到C杆
n = int(input())
hanoi(n, "A", "B", "C")
用例测试结果 | 运行时间 | 占用内存 | 提示 | 得分 |
---|---|---|---|---|
用例1通过 | 32ms | 4624kb | 2 |
本次得分/总分:2.00/2.00分