ACM_漢諾塔問題(水)
阿新 • • 發佈:2018-05-19
for 思路 names include 推導 span return bits tar
Problem Description:
最近小G迷上了漢諾塔,他發現n個盤子的漢諾塔問題的最少移動次數是2^n-1,即在移動過程中會產生2^n個系列。由於發生錯移產生的系列就增加了,這種錯誤是放錯了柱子,並不會把大盤放到小盤上,即各柱子從下往上的大小仍保持如下關系 : n=m+p+q a1>a2>...>am b1>b2>...>bp c1>c2>...>cq 小G希望聰明的你能告訴他所有會產生的系列總數。
Input:
輸入一個N,N<30
Output:
對於每組數據,輸出移動過程中所有會產生的系列總數
Sample Input:
1 3
Sample Output:
3 27
解題思路:這道題跟 杭電hdu1996漢諾塔VI 幾乎一樣。在正確的擺放規則下,問題求解其實就是把n個盤子分開擺在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 }
ACM_漢諾塔問題(水)