Hanoi塔題解

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]);
} 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章