大學生新聞網,大學生新聞發布平臺
大學生新聞網
大學生新聞大學生活校園文學大學生村官
社會實踐活動社會實踐經歷社會實踐報告社會實踐總結社會實踐心得
全國排名校友會版軟科排名分類排名本科排名一本排名二本排名專科排名學校地址
求職簡歷職場法則面試技巧職場故事求職招聘大學生就業
英語學習計算機學習電氣工程機械工程經濟管理建筑設計財務會計
申請書證明書檢討書自薦信演講稿心得體會調查報告讀后感求職信推薦信其它范文

C語言漢諾塔問題,用C語言實現漢諾塔

漢諾塔問題是指:一塊板上有三根針 A、B、C。A 針上套有 64 個大小不等的圓盤,按照大的在下、小的在上的順序排列,要把這 64 個圓盤從 A 針移動到 C 針上,每次只能移動一個圓盤,移動過程可以借助 B 針。但在任何時候,任何針上的圓盤都必須保持大盤在下,小盤在上。從鍵盤輸入需移動的圓盤個數,給出移動的過程。

算法思想
對于漢諾塔問題,當只移動一個圓盤時,直接將圓盤從 A 針移動到 C 針。若移動的圓盤為 n(n>1),則分成幾步走:把 (n-1) 個圓盤從 A 針移動到 B 針(借助 C 針);A 針上的最后一個圓盤移動到 C 針;B 針上的 (n-1) 個圓盤移動到 C 針(借助 A 針)。每做一遍,移動的圓盤少一個,逐次遞減,最后當 n 為 1 時,完成整個移動過程。

因此,解決漢諾塔問題可設計一個遞歸函數,利用遞歸實現圓盤的整個移動過程,問題的解決過程是對實際操作的模擬。

程序代碼

#include <stdio.h>
int main()
{
    int hanoi(int,char,char,char);
    int n,counter;
    printf("Input the number of diskes:");
    scanf("%d",&n);
    printf("\n");
    counter=hanoi(n,'A','B','C');
    return 0;
}
 
int hanoi(int n,char x,char y,char z)
{
    int move(char,int,char);
    if(n==1)
        move(x,1,z);
    else
    {
        hanoi(n-1,x,z,y);
        move(x,n,z);
        hanoi(n-1,y,x,z);
    }
    return 0;
}
 
int move(char getone,int n,char putone)
{
    static int k=1;
    printf("%2d:%3d # %c---%c\n",k,n,getone,putone);
    if(k++%3==0)
        printf("\n");
    return 0;
}
調試運行結果
當移動圓盤個數為 3 時,具體移動步驟如下所示:
Input the number of diskes:3

1: 1 # A---C
2: 2 # A---B
3: 1 # C---B

4: 3 # A---C
5: 1 # B---A
6: 2 # B---C

7: 1 # A---C
總結
本實例中定義的 hanoi() 函數是一個遞歸函數,它有四個形參"n""x""y""z"。"n" 是移動的圓盤個數,"x""y""z" 分別表示三根針,其功能是把 x 上的 n 個圓盤移動到 z 上。當 n=1 時,直接把 x 上的圓盤移到 z 上,輸出"x---Z"。當 n!=1 時,則遞歸調用 hanoi() 函數,把 (n-1) 個圓盤從 x 移到 y,輸出"x—-z";再遞歸調用 hanoi() 函數,把 (n-1) 個圓盤從 y 移到 z。在遞歸調用函數的過程中"n=n-1",n 的值逐次遞減,最后 n=1,終止遞歸調用,逐層返回,移動過程結束。
    作者:大學生新聞網    來源:大學生新聞網
    發布時間:2025-03-10    閱讀:
    掃一掃 分享悅讀
  • C語言漢諾塔問題,用C語言實現漢諾塔
  • 漢諾塔問題是指:一塊板上有三根針 A、B、C。A 針上套有 64 個大小不等的圓盤,按照大的在下、小的在上的順序排列,要把這 64 個圓盤從
  • 03-10 關注:1
  • C語言日期函數,日期處理函數
  • 定義一個表示日期的結構體類型,再分別定義函數完成下列功能:計算某一天是對應年的第幾天,這一年一共多少天;計算兩個日期之間相隔的
  • 03-10 關注:0
  • C語言整數逆序輸出
  • 將一個從鍵盤輸入的整數存放到一個數組中,通過程序的運行按照數組中的逆序輸出該整數,利用遞歸的方法解決問題。
  • 03-10 關注:1
  • C語言約瑟夫環問題
  • 編號為 1,2,3,…,n 的 n 個人圍坐一圈,任選一個正整數 m 作為報數上限值,從第一個人開始按順時針方向報數,報數到 m 時停止,報
  • 03-10 關注:1
主站蜘蛛池模板: 欧美日韩亚洲电影网在线观看| 成品大香煮伊在2021一| 97色精品视频在线观看| 双乳奶水被老汉吸呻吟视频 | 欧美一区二区久久精品| √天堂中文www官网| 十七岁日本高清电影免费完整版| 日本一卡2卡3卡4卡无卡免费| 豆奶视频最新官网| 中国一级特黄aa毛片大片| 动漫美女和男人羞羞漫画| 性色av无码一区二区三区人妻| 精品人妻系列无码人妻漫画| japanese日本熟妇多毛| 亚洲日韩中文字幕一区| 国产无遮挡吃胸膜奶免费看视频| 日本特交大片免费观看| 精品无码国产自产在线观看水浒传 | 日批视频在线看| 第一福利在线视频| 99久久香蕉国产线看观香| 亚洲国产精品一区二区三区在线观看| 国产日韩欧美综合在线| 日日躁夜夜躁狠狠躁| 狠狠色噜噜狠狠狠888米奇视频| 1区1区3区4区产品亚洲| 久久精品道一区二区三区| 午夜视频在线在免费| 国产精品对白刺激久久久| 李老汉的性生生活2| 韩国三级女电影完整版| 三极片在线观看| 亚洲www视频| 国产亚洲成AV人片在线观看| 天天色天天操综合网| 欧美日韩一区二区不卡三区| 老鸭窝毛片一区二区三区| 99久久er热在这里只有精品99| 久久五月天婷婷| 亚洲日本在线观看| 午夜视频在线观看免费完整版|