Hanoi塔
題目描述
問題的提出:Hanoi塔由n個大小不同的圓盤和三根木柱a,b,c組成。開始時,這n個圓盤由大到小依次套在a柱上,如圖所示。
要求把a柱上n個圓盤按下述規則移到c柱上:
規則:
(1)、一次只能移一個圓盤;
(2)、圓盤只能在三個柱上存放;
(3)、在移動過程中,不允許大盤壓小盤。
問將這n個盤子從a柱移動到c柱上,總計需要移動多少個盤次?
輸入格式
一個數n(1≤n≤63)
輸出格式
一個數,總計需要移動多少個盤次
樣例
樣例輸入
3
樣例輸出
7
精髓:
要想把片數爲n(a[n])的漢諾塔從a柱移動到c柱的話,需要先將前面n-1片(a[n-1])移到b柱,把第n片(1)移到c柱上,再把前面n-1片(a[n-1])移到c柱上。
所以遞推式就是:a[i]=2*a[i-1]+1;
分析圖:
參考代碼:
#include<cstdio>
int main() {
int n;
long long a[70]={0,1};
scanf("%d",&n);
for(int i=2;i<=n;i++) {
a[i]=2*a[i-1]+1;
}
printf("%lld",a[n]);
}