n漢諾塔問題的移動次數

2021-09-02 02:17:24 字數 631 閱讀 9013

相信大家對漢諾塔問題都不陌生,題目中的n漢諾塔問題其實指的是在a柱上有n個相同的銅盤,比如在三漢諾塔問題中,a柱上一共有9個銅盤,其中從上往下每三個銅盤的大小是相同的。

n漢諾塔問題的解題方法和經典漢諾塔問題大致相同,只不過在前者中我們可以把大小相同的銅盤看作乙個整體,根據漢諾塔問題的規則,對於n個大小相同的銅盤,我們可以直接依次將每個銅盤從a柱移到c柱,這樣一來,移動的次數會是經典漢諾塔問題的n倍。

首先考慮經典的漢諾塔問題,當a柱上只有乙個銅盤時,直接將其移到c柱即可,當a柱上有兩個銅盤時,移動三次,當a柱上有三個銅盤時,移動七次。。。把其看作數列,以找出相鄰兩項的關係:後一項是前一項加上2的i次方,下面是**:

sum =0;

for(

int i =

0; i < n1; i++

) sum +

=pow(2

, i)

;//先求出解決經典漢諾塔問題所需要移動的次數

cout << n * sum;

其中,n1是將所有相同的銅盤看作乙個整體後,a柱上銅盤的數量,n則是每個整體中,銅盤的數量。這樣,最終輸出的則是完成該問題所需要移動的最少次數。

漢諾塔移動次數(2064)

漢諾塔一般步驟 將 n 1 個圓盤移動到c柱 第 n 個圓盤移動到c柱 前 n 1 個圓盤再移動到c柱 由步驟可得遞推式 step n step n 1 1 step n 1 2 step n 1 1 step 1 0 即 step n 2 n 1。本題要求每步只能移到b柱或從b柱移出。故 首先將n...

漢諾塔移動

漢諾塔的移動可以用遞迴函式非常簡單地實現。請編寫move n,a,b,c 函式,它接收引數n,表示3個柱子a b c中第1個柱子a的盤子數量,然後列印出把所有盤子從a借助b移動到c的方法,例如 期待輸出 a c a b c b a c b a b c a c move 3,a b c 乙個環 ste...

漢諾塔 最少移動次數 路徑 遞迴

漢諾塔 三個柱子 a,b,c,a有n個環,講n個環全部移動到c上,要求 1 移動次數最少 2 大環不能放在小環上。輸入 n n 10 輸出 移動次數 路徑例 輸入 3 輸出 7 1 from a to c 2 from a to b 1 from c to b 3 from a to c 1 fro...