原题传送门ios
这道题卡了我一个小时,是我在CODEVS上遇到的第一道难题,不偷看一眼题解的话可能真的想不出来QAQ,本身是真的菜啊。spa
一阶汉诺塔就是把A移动到C
而n(n>1)阶汉诺塔至关于执行了三大步骤:
1.在ACB的顺序下执行了n-1阶汉诺塔的移法
2.从A->C移动了最大盘
3.在BAC的顺序下执行了n-1阶汉诺塔的移法
很明显,递归就完了。code
#include<iostream> #include<cstdio> #include<string> #include<vector> #include<algorithm> #include<cstdlib> #include<cmath> #include<stack> using namespace std; int n,k=1,i; inline void move(int lv,char A,char C) { cout<<lv<<" from "<<A<<" to "<<C<<endl; } void h(int lv,char A,char B,char C) { if(lv==1) move(lv,A,C); else { h(lv-1,A,C,B); move(lv,A,C); h(lv-1,B,A,C); } } int main() { cin>>n; for(i=1;i<=n;i++)k*=2; cout<<k-1<<endl; h(n,'A','B','C'); return 0; }