hanoi
雙塔問題
(hanoi.pas/c/cpp)
【問題描述】給定a
bc三根足夠長的細柱,在
a柱上放有
2n個中間有孔的圓盤,共有
n個不同的尺
寸,每個尺寸都有兩個相同的圓盤,注意這兩個圓盤足不加區分的
下圖為n=3
的情形。現要將
這些圓盤移到
c柱上,在移動過程中可放在
b柱上暫存。要求:
(1)每次只能移動乙個圓盤;
(2)abc
三根細柱上的圓盤都要保持上小下大的順序;
任務:設an為
2n個圓盤完成上述任務所需的最少移動次數,對於輸入的
n,輸出
an【輸入】
輸入檔案
hanoi.in
為乙個正整數
n,表示在
a柱上放有
2n個圓盤。
【輸出】
輸出檔案
hanoi.out
僅一行,包含乙個正整數,為完成上述任務所需的最少移動次數
an【輸入輸出樣例
hanoi.in hanoi.out
1 2【輸入輸出樣例
hanoi.in hanoi.out
2 6【限制】
對於%的資料,
1<=n<=25
對於%的資料,
l<=n<=200
【提示】
設法建立an與
an-1
的遞推關係式。
【試題分析】
不難發現:
an=2an-1+2
(特別的,
a1=2
證明如下:要將a
柱上的2n
個盤子移到
c柱上,
最佳的策略就是先將
(2n-2)
個盤子借助
c柱移到
b柱上,
所需的次數
為an-1
,再將a
柱上最大的兩個盤子直接移到
c柱上,所需的次數為
,最後將
b柱上的
(2n-2)
個盤子借助a
柱移到c
柱上,所需的次數為
an-1
。總次數
an=an-1+2+an-1=an=2an-1+2
漢諾雙塔問題python Hanoi漢諾雙塔問題
hanoi漢諾雙塔問題 題目描述 給定a,b,c三根足夠長的細柱,在a柱上放有2n個中間有孔的圓盤,共有n個不同的尺寸,每個尺寸都有兩個相同的圓盤,注意這兩個圓盤是不加區分的。現要將這些圓盤移到c柱上,在移動過程中可放在b柱上暫存。要求 1 每次只能移動乙個圓盤 2 a b c三根細柱上的圓盤都要保...
漢諾雙塔問題python Hanoi漢諾雙塔問題
hanoi漢諾雙塔問題 題目描述 給定a,b,c三根足夠長的細柱,在a柱上放有2n個中間有孔的圓盤,共有n個不同的尺寸,每個尺寸都有兩個相同的圓盤,注意這兩個圓盤是不加區分的。現要將這些圓盤移到c柱上,在移動過程中可放在b柱上暫存。要求 1 每次只能移動乙個圓盤 2 a b c三根細柱上的圓盤都要保...
漢諾雙塔 (高精度)
由普通漢諾塔問題,設數量為n時移動次數為a n 則a n a n 1 1 a n 1 2 a n 1 1.因為a 1 1,所以a n 2 n 1.找規律?故雙塔就是2 2 n 1 但這裡沒用到 因為資料忒大,所以得用高精度。這裡參考了別人的 思路就是用陣列來儲存每一位數。1 include2 inc...