Problem Description:
最近小G迷上了漢諾塔,他發現n個盤子的漢諾塔問題的最少移動次數是2^n-1,即在移動過程中會產生2^n個系列。由於發生錯移產生的系列就增加了,這種錯誤是放錯了柱子,並不會把大盤放到小盤上,即各柱子從下往上的大小仍保持如下關系 :
n=m+p+q
a1>a2>...>am
b1>b2>...>bp
c1>c2>...>cq
小G希望聰明的你能告訴他所有會產生的系列總數。
Output:
對於每組數據,輸出移動過程中所有會產生的系列總數
Sample Output:
3
27
解題思路:這道題跟 杭電hdu1996漢諾塔VI 幾乎一樣。在正確的擺放規則下,問題求解轉化為把n個盤子分開擺在3個塔上出現的所有可能情況數,每個盤子有3種放置選擇,簡單地推導一下公式:可得3n(n<30).
AC代碼:
1 #include<bits/stdc++.h>
2 using namespace std;
3 typedef long long LL;
4 int n;
5 int main()
6 {
7 LL a[35]={1};
8 for(int i=1;i<35;i++)
9 a[i]=a[i-1]*3;
10 while(cin>>n){
11 cout<<a[n]<<endl;
12 }
13 return 0;
14 }