SSL ZYC Hanoi雙塔問題

2021-08-15 02:31:31 字數 1076 閱讀 9175

題目大意:

給定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柱上暫存。要求...