古代有一座汉诺塔,塔内有3个座A、B、C。
A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示。
有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座来放盘子。要求输出移动的步骤。
输入格式
输入一个正整数,表示汉诺塔内的盘子个数n(1<=n<=64)。
输出格式输出移动的步骤,每行一步,如从A座移动到C座,输出“A-->C”。
输入输出示例| 输入 | 输出 | |
| 示例 1 | 3 | A --> C
|
C++代码:
#includeusing namespace std; void move(char A, char C){ cout << A << " --> " << C << endl; //打印一下路径,是从哪个塔到哪个塔 } void Hanoi(int n, char A, char B, char C){ if(n == 1){ //如果初始只有1个盘子 move(A, C); //直接把A塔上的一个盘子移动到C塔就可以 return; } else { Hanoi(n - 1, A, C, B); //移动n-1个盘子,从A移动到B塔,C塔是辅助塔 move(A, C); //A塔已经移走了n-1个盘子了,剩下那个必是最大的盘子,直接移动到C塔就可以了 Hanoi(n - 1, B, A, C); //移动n-1个盘子,从B塔移动到C塔,A塔是辅助塔 } } int main(){ int n; cin >> n; //初始有几个盘子在A上 Hanoi(n, 'A', 'B', 'C'); //A、B、C分别表示三个塔 return 0; }
Python代码:
def move(A, C):
print(A, end='')
print(' --> ', end='')
print(C)
def Hanoi(n, A, B, C):
if n == 1:
move(A, C)
return
else:
Hanoi(n - 1, A, C, B)
move(A, C)
Hanoi(n - 1, B, A, C)
n = eval(input())
Hanoi(n, 'A', 'B', 'C')


