给定三根柱子,记为 A,B,C ,其中 A 柱子上有 N 个盘子,从上到下编号为 0 到 N−1 ,且上面的盘子一定比下面的盘子小。问:将 A柱上的盘子经由 B 柱移动到 C 柱最少需要多少次?
移动时应注意:① 一次只能移动一个盘子
②大的盘子不能压在小盘子上
//a为起始柱 b为中间柱 c为终点柱
#include <iostream>
using namespace std;
int n;
void hanoi(int n,char a,char b,char c)/*有n层和 a,b,c三个柱子*/
{
if(n==0)/*如果没有层,就出去*/
return;
else{
hanoi(n-1,a,c,b);//把n-1个层从a柱子利用c柱子挪到b柱子
cout<<a<<' '<<c;//输入过程
hanoi(n-1,b,a,c);//把n-1个层从b利用a挪到c
}
}
int main()
{ cin>>n;
hanoi(n,'A','B','C');
return 0;
}