『壹』 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語言編漢諾塔
a,b,c就表示三個桿子而已,你寫d,e,f也沒什麼啊,這個就不用糾結了
『叄』 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語言程序
還要動畫?那個需要用到圖形庫的;
你用的是什麼開發環境啊
『伍』 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上搬過去的。
}
}
『陸』 C語言漢諾塔問題
哥們,你還沒明白什麼叫遞歸,用tc單步執行一遍看看你就會明白了,這里說太麻煩。
『柒』 C語言關於漢諾塔的小程序
void main()
{
int n;
printf("please input number: ");
scanf("%d",&n);
printf("the stemp is :\n");
hounit(n,'a','b','c');
}沒有太大問題 下次注意一點就行了 n前面一定要加上&
『捌』 c語言漢諾塔.
# include <stdio.h>
void hannuota(int n,char A,char B, char C);
int main(void)
{
char ch1 = 'A';
char ch2 = 'B';
char ch3 = 'C';
int n;
printf("請輸入要移動的盤子的個數:");
scanf("%d",&n);
hannuota(n,'A','B','C');
return 0;
}
//將A柱子上的n個盤子藉助於B移動到C柱子上,
//每次移動時,必須保證大盤子在小盤子下面
//最大值不能是64
void hannuota(int n,char A,char B,char C)
{
/*
如果是1個盤子
直接將A柱子上的盤子從A移動到C
否則
先將A柱子上的n-1個盤子藉助於C從A移動到B
直接將A柱子上的盤子從A移動到C
最後將B柱子上的n-1個盤子藉助於A從B移動到C
*/
if (1 == n)
{
printf("將編號為%d的盤子從%c柱子移動到%c柱子\n",n,A,C);
}
else
{
hannuota(n-1,A,C,B);
printf("將編號為%d的盤子從%c柱子移動到%c柱子\n",n,A,C);
hannuota(n-1,B,A,C);
}
}
/*
在vc++6.0中的輸出結果:
------------------
請輸入要移動的盤子的個數:3
將編號為1的盤子從A柱子移動到C柱子
將編號為2的盤子從A柱子移動到B柱子
將編號為1的盤子從C柱子移動到B柱子
將編號為3的盤子從A柱子移動到C柱子
將編號為1的盤子從B柱子移動到A柱子
將編號為2的盤子從B柱子移動到C柱子
將編號為1的盤子從A柱子移動到C柱子
-------------------
*/
/*
供參考! 呵呵
*/
『玖』 C語言--漢諾塔程序執行步驟
這個問題你要先把遞歸搞懂才能理解的, 最好是單跟蹤執行一下, 我這里就簡單說一下吧!
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才結束