原題傳送門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; }