河內塔 漢諾塔問題,「河內塔問題」的解法

2025-07-18 02:35:17 字數 3745 閱讀 9178

1樓:青陵閒客

設f(n)為第n次移動的次數,則f(n)=2f(n-1)+1且f(1)=1;

所以f(n)+1=2(f(n-1)+1)

f(n)+1=(f(1)+1)*2^(n-1)所以f(n)=2^n-1

所以f(64)=2^64-1

時間為(2^64-1)/5分鐘。

「河內塔問題」的解法

2樓:網友

河內塔(又稱漢諾塔)問題是印度的乙個古老的傳說。開天闢地的神勃拉瑪在乙個廟裡留下了三根金剛石的棒,第一根上面套著64個圓的金片,最大的乙個在底下,其餘乙個比乙個小,依次疊上去,廟裡的眾僧不倦地把它們乙個個地從這根棒搬到另一根棒上,規定可利用中間的一根棒作為幫助,但每次只能搬乙個,而且大的不能放在小的上面。解答結果請自己執行計算,程式見尾部。

面對龐大的數字(移動圓片的次數)18446744073709551615,看來,眾僧們耗盡畢生精力也不可能完成金片的移動。

後來,這個傳說就演變為漢諾塔遊戲:

1.有三根杆子a,b,杆上有若干碟子。

2.每次移動一塊碟子,小的只能疊在大的上面3.把所有碟子從a杆全部移到c杆上。

問題解決步驟:2的n次方-1,n為河內塔的階數。

3樓:網友

求 有n層塔時 所需的移動的次數 f(n)解法思想:

首先要把上面的n-1層塔 移動到 b杆上。

所需的次數是f(n-1),然後把第n層移動到c杆。

所需的次數 是 1次。

最後再把b杆上的 n-1層 移動到 c杆。

所需次數是f(n-1)

所以 f(n)=f(n-1)+1+f(n-1)=2f(n-1)+1就得到其遞迴解法。

然後 f(1)=1,f(n)=2f(n-1)+1 這倆個條件學過離散數學的話 就可以推出。

f(n)=2^n - 1 具體步驟不累述了。

4樓:網友

番茄戰士 的說法是正確的。

但我想說的是一般怎麼去解決這個問題才是最快的解決方法。

先從最底座的那個看起,要將它最左移到最右,最快的方法是其它的碟子全在中間的杆子上,這樣,只要移一步就可以到位了。

至於倒數第二個碟子,因為倒數第乙個要一步移到最右邊,所以在這之前,它必須在中間的杆子上,也就是說,要想它總共只移兩步,第一步它所停的位置必須是中間的那個杆子。

同理,倒數第三個得先放在最右邊那個杆子上,倒數第四個得先放在中間的那個杆子上,倒數第五個得先放在最右邊的那個杆子上,..

如此可知,從最底座的碟子算起,奇數位的碟子得先放在最右邊位的杆子上,偶數位的碟子得先放在中間的杆子上。

當然,當最底座的碟子放好之後,其它的同理考慮,其它的情況當然也是同樣的考慮。

河內塔(漢諾塔) 問題50分```求助``

5樓:網友

漢諾塔是個典型的函式遞迴呼叫的例子。先弄明白遞迴的思路,再來看**。

漢諾塔的目的是把1柱上的n個盤子轉移到3柱,移動方法如下:

1、借3柱,將1柱上的n-1個盤子移到2柱上;

2、將1柱上最下面的盤子移到3柱;

3、借1柱,將2柱上的n-1個盤子移到3柱。

其中步是不可能一步完成的。

其實上面的三步就是void hanoi(int n,int p1,int p2,int p3)中的三個語句,只是表達方法不同。

我們不用去關心到底如何「將1柱上的n-1個盤子移到2柱上」或者「將2柱上的n-1個盤子移到3柱」,因為上面的三個語句已經給出了一種正確的方法,不論n是多少,此方法都正確。計算機會將兩步,直到n是1 。手工也可以將其,你可以試試把兩步分別,n=4時也不難做到,但好像沒什麼意義。

最後說一句,應該相信正確的方法,而不必知道它的細節,就跟黑箱一樣。

6樓:匿名使用者

hanoi(n-1,p1,p3,p2);

遞迴呼叫後,在下一層中p2就是3,因為這裡的p3將來要傳給p2的。

然後在hanoi(n-1,p2,p1,p3);開始後,3就到了p1中。

7樓:高金山

你注意觀察一下函式的宣告和呼叫:

宣告:void hanoi(int n,int p1,int p2,int p3)

呼叫:hanoi(n-1,p1,p3,p2);

hanoi(n-1,p2,p1,p3);

宣告和呼叫中的p1,p2,p3的順序是不一樣的這種做法達到了你說的功能了。

8樓:網友

請不要複製亂七八糟自己都不知道是不是答案的貼過來。

關於河內塔問題的公式

9樓:匿名使用者

設河內塔的移動步數為s,河內塔個數為n,則全部移動到位以後s=2^n-1

10樓:網友

只要公式的話就是:2的n次方減1。(有幾層木塊n就是幾)

11樓:沐子瑜

2的n次方減一,有幾棵株子n次就是幾。

河內塔問題怎麼解決

12樓:網友

我寫的源程式**:

#include

void hanio(int num,char aa,char bb,char cc)

河內塔問題與解題規律.....

13樓:網友

解析:對於此題,我們一遇到此類題是不是有點讓人煩惱!為什麼要來回移動呢?一下整體搬過去不就好了嗎?

所以在遇到此類題時,一定要冷靜,不要急於做,而要思考,看看我們有什麼方法找到一種能夠比較簡單的規律。

第一,先我們將複雜的問題簡單化,考慮一下一些簡單的問題,這是我們解決此類問題的關鍵,就是當我們對一些較大的數形成的複雜邏輯不能夠理清時,我們要從最基本最簡單的數字如1,2,3,開始。如下:

假如只有1個穿孔圓盤,就需要移動1次。 a→c 1 次。

假如只有2個穿孔圓盤,就需要移動3次。a→b, a→c,b→c 3次。

假如只有3個穿孔圓盤,這時我們可以將上面的2個圓盤看做是乙個整體,也就是將3分解成1+2.來考慮。如我們將最大的第三個圓盤,取消,只剩2個圓盤,這時藉助c柱,移動3次可以讓2個圓盤到從a到b柱。

再考慮最大的圓盤,移動最大的第三個圓盤到c柱。這時藉助a柱,移動3次可以讓2個圓盤從b到c柱。就需要移動7次。

第二,從移動的次數中,尋找可以被我們利用的規律。

這7次中,前有3次是為了將上面的2個圓盤從a到b柱,中間1次是最大的圓盤a→c移動,後3次是為了將上面的2個圓盤從b到c柱移動。

從上面的兩個3次的移動看,兩個圓盤的移動必須經過3次方可成功。這也就是是2個圓盤必須經過3次移動才能從乙個柱子到另一柱子。同理我們從這一步的7次移動來看,這也就是是3個圓盤必須經過7次移動才能從乙個柱子到另一柱子。

另外我們從移動次數的結果資料:1,3,7,這樣的資料分析,就得出這樣乙個規律:

每增加1個圓盤的次數就是在前面既原來的次數的兩倍的基礎上,再加1次。

於是我們就可以根據上面的規律得出以下的結論:

有4個穿孔圓盤,最少的次數,15次。(是否正確,可以自己驗證一下)

有5個穿孔圓盤,最少的次數,31次。

有6個穿孔圓盤,最少的次數,63次。

我們將次數寫出乙個數列,就得到如下數列:

這時我們就會發現它和我們知道它和我們上一講講到的乙個如下數列非常相似。

而上面的移動次數與數列有乙個配合的規律,這時我們馬上就明白了,這道題的答案:—1

小學數學6年級奧賽題求解(漢諾塔問題)

這個題目對於小學數學來說有點深 先看看這個題目的來歷吧 關於漢諾塔 在印度,有這麼一個古老的傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有一個僧侶...

刀塔傳奇大魚人的問題,《刀塔傳奇》橙2大魚人實力檢測

英雄定位 力量型英雄,前排坦克。英雄屬性 以三星為例。力量成長 智力成長 敏捷成長。作為前排大魚人的三維算是比較一般的。敏捷會比其他大部分的力量型英雄略高一些。級以前的血量還是很可觀的。技能分析 .碎擊 錘擊地面,對中等範圍的敵人造成魔法傷害並眩暈。大魚人的大招,魔法傷害技能,帶有控制,能夠對敵人造...

維斯塔系統問題

你的系統是多少位的,現在普遍是32位的,如果你的記憶體在4g以上那你的系統很有可能是64位的 如果是32位的系統你換成xp執行比vista還好.要安裝中文的vista系統,要用中文版的光碟,才能裝.有的系統盤有兩張光碟,有一張是專門的語言.如果你現狀是64位的系統,見意還是裝64位的系統,它支援16...