c語言漢諾塔程式,C語言漢諾塔程式

2021-12-19 05:47:49 字數 3234 閱讀 8788

1樓:券商論

將以下內容全部複製到新建的原始檔中:(本人自己寫的,因為你那課本上的**,沒解釋,書寫不規範,很難理解清楚,所以我直接新寫了一個完整的**,附帶詳細說明)

#include

//漢諾塔x層塔從a塔整體搬到c塔,中間臨時b塔。

//x層塔是從大到小往上疊放。每次移動只能移動一層塔。並且在移動過程中必須保證小層在上邊

//藉助b塔可以將x層塔全部從a搬到c上,並且符合要求(在移動過程中大的那塊在下邊,小的那塊在上邊)

int main()

//以下是tower函式的定義

//引數解析:x層塔放在a上,b是中間塔,c是目標塔。即x層塔要從a搬到c上。

//此函式實現x層塔從a整體轉移到c上。以及這個過程是怎麼搬的全部過程。

void tower(int x,char a,char b,char c)}

2樓:鬆思宸

只是一個遞迴呼叫的典型例子。

函式move(char x, char y)表示把把x杆上的最上面的一個盤子拿下來放到y杆上。

函式void hanoi( int n, char one, char two, char three ) 的作用是把位於one杆的所有n個盤子藉助two杆移動到three杆上。

玩漢諾塔做法是,假設初始時1號杆上有n個盤子,盤子是頂上的盤子小越往下越大,這時候如果要把所有n個盤子從1號杆挪到3號杆的話,需要先把1號杆上上面的n-1個盤子放到2號杆上,然後把1號杆最底下那個最大的盤子放到3號杆上,這時候第一大步就完成了。下一步就是把2號杆上最低下那個最大的盤子藉助1號杆移動到3號杆上。總之就是一大步把其餘杆上最大的一個盤子放到3號杆上。

當最後剩下一個盤子沒有移動到3號杆的時候,只需要將這個盤子直接從其他杆拿到3號杆即可了。void hanoi( int n, char one, char two, char three ) 完成的就是上述的步驟嘍。

3樓:曹越

先看hanoi(漢諾塔)函式

如果n=1的情況下呼叫move函式,但剛開始n不可能等於1,所以選用else操作。

hanoi( n - 1, one , three, two ); 這裡的意思是:盤子的總數等於n,所以先把n-1個盤子,通過第三個柱子挪到第二個柱子上。學過計算機的人知道,要想實現兩數之間的交換,就必須借用第三個數,所以這裡為了把n-1個盤子挪到第二個柱子上,就必須借用第三個柱子。

然後呼叫move函式。move(one,three ); printf( "%c ---> %c\n", x, y );呼叫move函式之後,move函式的功能是把最後一個盤子挪到第三個柱子上,hanoi( n - 1, two, one, three ); 意思是當最後一個盤子已經挪到第三個柱子上之後,在把第二個柱子上的n-1個盤子通過第一個柱子挪到第三個柱子上。

這個演算法的整體意思是在n=1的情況下,直接把盤子挪到第三個柱子上,在n>1的情況下,先把n-1個盤子挪到第二個柱子上,把最後一個盤子挪到第三個柱子上之後,再把在第二個柱子上的n-1個盤子通過第一個柱子挪到第三個柱子上。

move函式裡的printf語句應該是為了顯示盤子的呼叫過程。

4樓:傲世修羅王

#include

void move(char a, char b)void hanoi(int n, char a, char b, char c)

}int main(int argc, char *argv)

5樓:渴侯夏侯菡

參考,自己寫的。看看無害。

c語言--漢諾塔程式執行步驟

6樓:

這個問題你要先把遞迴搞懂才能理解的, 最好是單跟蹤執行一下, 我這裡就簡單說一下吧!

hanoi(5, 'a', 'b', 'c');把5個從'a'移到'c'

這時n=5, noe='a', two='b', three='c'

因為n!=1, 執行else裡的

hanoi( 4, 'a', 'c', 'b'); //把上面4個從a移到b

move( 'a', 'c'); //把第5個從a移到c

hanoi( 4, 'b', 'a', 'c'); //再把那4個從b移到c

上面的很好明白的, 再分析hanoi( 4, 'a', 'c', 'b'); //把上面4個從a移到b,也是執行else

hanoi( 3, 'a', 'b', 'c'); //把上面3個從a移到c

move( 'a', 'b'); //把第4個從a移到b

hanoi( 4, 'c', 'a', 'b'); //再把那3個從c移到b

一直到n=1才結束

7樓:匿名使用者

用c語言編寫程式求漢諾塔的移動步驟

8樓:匿名使用者

#include

void move(char a,char b)void f(int n,char a,char b,char c)}void main()

這是我的** 前面的是定義一個函式 這裡遞迴體現在函式裡面還有函式 於是會一次又一次的計算 直到最後把n-1以前的都移到b,最下面的移到c,再把其他的從b移到c。。 無返回的話 應該是這裡用void 沒有return返回數值

9樓:匿名使用者

#include

using namespace std;

int main()

漢諾塔c語言程式

10樓:

hanoi(int n,char a,char b,char c)

//將n個盤子從a通過b移動到c}

11樓:匿名使用者

main()

void hanoi(int n,char a,char b,char c);}

12樓:匆匆小女子

c++:

#include

#include

using namespace std;

//移動函式;

void move(char start,char finish)

c語言漢諾塔問題,C語言漢諾塔問題

關於漢諾塔這個東西是相當的抽象,我當時學習的時候看了好幾個版本的教程,也沒有搞懂,最後還是自己反覆的理解,頓悟了,所以我這裡把當時我作為初學者的想法寫給你,但是最重要的還得靠你自己的理解 1 對於void hanoi int n,char one char two,char three 這個函式,表...

c語言遊戲漢諾塔的執行過程,C語言遊戲漢諾塔的執行過程!

這樣寫我還沒有見過,感覺不怎麼樣,我見過一種寫法 偽 假設初始狀態從左到右依次是柱bac,盤子在a上 順序其實無所謂 目標從a到c,即右移 n是盤子個數目,1表示右移,如果到了已經在最右邊,直接迴圈到最左邊的 1表示與此正好相反 偽 void hanoi int n,int d d 1相當於把n 1...

漢諾塔問題的漢語詳細解釋,漢諾塔問題的漢語詳細解釋

漢諾塔問題 問題 首先去掉原來的神話色彩 神廟 僧侶和世界末日,來到問題的數學本質。有a b c三根柱子。a上堆放了n個盤子,每個盤子都比它下面的盤子小一些。現在要把盤子全部搬到c上去,條件是每次只能搬動一個盤子,而且任何時候都不能放在比它小的盤子上面 顯然,必須用到b作為中轉 怎麼搬動這些盤子呢?...