當前位置:首頁 » 編程語言 » c語言漢諾塔輸出
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言漢諾塔輸出

發布時間: 2023-01-06 20:44:41

c語言漢諾塔

void move( char x, char y )

{
printf( "%c ---> %c\n", x, y );
}

void hanoi( int n, char one, char two, char three )

{
if ( n == 1 ) move( one , three )

else

{
hanoi( n - 1, one , three, two );

move( one, three );

hanoi( n - 1, two, one, three );
}
}

❷ c語言輸出7個盤的漢諾塔解決方案

假設三根柱子A/B/C,要從A移動到B,有n個盤子,那麼可以設函數

hanoi(int n,char A ,char B,char C);

其中:n是盤子數量,A,B,C是柱子名字

  1. 先考慮一個盤子的情況

    一個盤子的時候,顯然,A直接放到B就可以了

  2. 多個盤子的情況

    如果多個盤子,那麼不能直接從A放到B,但是可以藉助C柱子

    即,

    1)先把n-1個盤子從A柱子藉助B柱子放到C柱子;

    2)把A放到B;

    3)C上的n-1個盤子藉助A放到B盤子

    這樣,完成了狀態的轉移

代碼如下:

#include<stdio.h>
voidhanoi(intn,charA,charB,charC)
{
if(n==1)
printf("%c->%c ",A,B);
else{
hanoi(n-1,A,C,B);
printf("%c->%c ",A,B);
hanoi(n-1,C,A,B);
}
}
intmain()
{
intm;printf("inputthenumberofdiskes:");
scanf("%d",&m);
printf("Thesteptomoving%ddiskes: ",m);
hanoi(m,'A','B','C');
return0;
}

輸入7,即可得到答案

❸ C語言編程(漢諾塔問題)

move(n-1,x,z,y);——這句是調用函數,這個函數就是前面聲明的:void move(int n,int x,int y,int z)
printf("%c-->%c",x,z);——這句是輸出,%c 是指按CHAR型輸出,"%c-->%c",就是輸出兩個CHAR型數據,中間用-->連接。而這兩個CHAR的數據就是x和z。比如結果是:a-->c
move(n-1,y,x,z);——這句還是調用函數,這個函數就是前面聲明的:void move(int n,int x,int y,int z)

❹ C語言漢諾塔

根據漢諾塔的游戲規則可知,若只有一個盤子,則只要直接搬運就可以了,其它的不需要再做。return語句的作用,就是遇到它時,程序直接返回到調用它的地方,不再執行此函數中return語句以後的代碼。

不過這里這個return語句也可以不寫,只是代碼要稍作更改(代碼的執行還是不變的,即與更改前完全等價):

voidhanNuoTa(intn,charfrom,charto,charhelper)
{
if(n==1)
{
printf("%c--->%c ",from,to);
}
else
{
hanNuoTa(n-1,from,helper,to);
printf("%c--->%c ",from,to);
hanNuoTa(n-1,helper,to,from);
}
}

❺ C語言漢諾塔程序

將以下內容全部復制到新建的源文件中:(本人自己寫的,因為你那課本上的代碼,沒解釋,書寫不規范,很難理解清楚,所以我直接新寫了一個完整的代碼,附帶詳細說明)
#include <stdio.h>
//漢諾塔x層塔從A塔整體搬到C塔,中間臨時B塔。
//x層塔是從大到小往上疊放。每次移動只能移動一層塔。並且在移動過程中必須保證小層在上邊
//藉助B塔可以將x層塔全部從A搬到C上,並且符合要求(在移動過程中大的那塊在下邊,小的那塊在上邊)
int main()
{
void tower(int x,char a,char b,char c); //聲明函數
int x=5,a='A',b='B',c='C'; //x表示有5層塔,具體要多少層自己修改這個值。abc分別表示ABC塔。

tower(x,a,b,c); //x層塔從a移動到c的全過程,主程序只有這條有效語句

return 0;
}

//以下是tower函數的定義
//參數解析:x層塔放在a上,b是中間塔,c是目標塔。即x層塔要從a搬到c上。
//此函數實現x層塔從a整體轉移到c上。以及這個過程是怎麼搬的全部過程。
void tower(int x,char a,char b,char c)
{
if(x==1)printf("將%d從%c放到%c\n",x,a,c); //只有1層塔時,直接從a搬到c上。
else //不止1層塔,則先將x-1層塔從a按照規律搬到b上,再將最後一塊從a搬到c上,最後再將b上的x-1層塔按照規律搬到c上。
{
tower(x-1,a,c,b); //先將x-1層塔從a按照規律搬到b上,注意參數b放在最後,因為放在最後的參數是准備搬過去的目標塔。
printf("將%d從%c放到%c\n",x,a,c); //將最後一塊從a搬到c上
tower(x-1,b,a,c); //最後再將b上的x-1層塔按照規律搬到c上,注意參數b放在開頭,因為x-1層是要從b上搬過去的。
}
}