題目大意:
給定a,b,c三根足夠長的細柱,在a柱上放有2n個中間有空的圓盤,共有n個不同的尺寸,每個尺寸都有兩個相同的圓盤,注意這兩個圓盤是不加區分的(下圖為n=3的情形)。現要將 這些國盤移到c柱上,在移動過程中可放在b柱上暫存。要求:
(1)每次只能移動乙個圓盤;
(2) a、b、c三根細柱上的圓盤都要保持上小下大的順序;
任務:設an為2n個圓盤完成上述任務所需的最少移動次數,對於輸入的n,輸出an。
思路:
這道題的思路有兩種:
(1)嘗試建立a[n]和a[n-1]的關係。
(2)直接用公式推出a[n]的值。
那麼兩種思路自然有兩種解法:
(1)我們可以發現,這一組數列為2,6,14,30,62······仔細一看,就找到了規律:a[n]=a[n-1]*2+2。那我們就可以從a[1]開始遞推,推到a[n]為止。
(2)如果直接求a[n]的值的話,我們就得先找規律。這道題的規律是a[n]=(2^n-1)*2。利用這條公式,我們就可以求出a[n]的值。
這道題由於答案很大,所以要用高精度。**:
#include
using
namespace
std;
const
int maxn=100;
int a[maxn+1],t,n;
int main()
} a[maxn]-=1; //由於2的任何次方(0次方和負次方除外)的尾數為2,4,6,8,所以這裡減1可以不用考慮退位問題。
t=0;
for (int i=maxn;i>=1;i--) //高精乘
int i=1;
while (a[i]==0) i++; //去掉前導0
for (int j=i;j<=maxn;j++) printf("%d",a[j]); //輸出最終結果
return
0;}
Hanoi 雙塔問題
operatorname luogup 1096 給定 a aa b bb c cc 三根足夠長的細柱,在 a aa 柱上放有 2n2n 2n個中間有孔的圓盤,共有 n nn 個不同的尺寸,每個尺寸都有兩個相同的圓盤,注意這兩個圓盤是不加區分的 下圖為 n 3 n 3n 3 的情形 現要將這些圓盤移...
雙塔問題題解
題目描述 2001年9月11日,一場突發的災難將紐約世界 中心大廈夷為平地,mr.f曾親眼目睹了這次災難。為了紀念 9?11 事件,mr.f決定自己用水晶來搭建一座雙塔。mr.f有n塊水晶,每塊水晶有乙個高度,他想用這n塊水晶搭建兩座有同樣高度的塔,使他們成為一座雙塔,mr.f可以從這n塊水晶中任取...
漢諾雙塔問題python Hanoi雙塔問題
hanoi 雙塔問題 hanoi.pas c cpp 問題描述 給定a bc三根足夠長的細柱,在 a柱上放有 2n個中間有孔的圓盤,共有 n個不同的尺 寸,每個尺寸都有兩個相同的圓盤,注意這兩個圓盤足不加區分的 下圖為n 3 的情形。現要將 這些圓盤移到 c柱上,在移動過程中可放在 b柱上暫存。要求...