漢諾塔c語言
⑴ 漢諾塔c語言
我給你個最經典的解法:
#include<stdio.h>
void main()
{
void hanoi(int n,char one,char two,char three);bsp; &nbs
int m;
printf("input the number of diskes:\n");
scanf("%d",&m);#include<stdio.h&
printf("The step to moveing %d diskes:\n",m);
hanoi(m,'A','B','C');
system("pause");char one,char two,ch
}
void hanoi(int n,char one,char two,char three)
{gt; void main() { &n<br/> void move(char x,char y);<br/> if(n==1)<br/> move(one,three);bsp; &nbs<br/> else<br/> {<br/> hanoi(n-1,one,three,two);p; void hanoi(int n,<br/> move(one,three);<br/> hanoi(n-1,two,one,three);<br/> }bsp; &nbs
}
void move(char x,char y)
{#include<stdio.h&
printf("%c-->%c\n",x,y);
}
⑵ 漢諾塔c語言高手進
你要Pascal的我還能幫幫你,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語言編漢諾塔
a,b,c就表示三個桿子而已,你寫d,e,f也沒什麼啊,這個就不用糾結了
⑸ 漢諾塔C語言程序
還要動畫?那個需要用到圖形庫的;
你用的是什麼開發環境啊
⑹ 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語言編寫程序求漢諾塔的移動步驟
#include<stdio.h>
void move(char a,char b)
{
printf("%c->%c\n",a,b);
}
void f(int n,char a,char b,char c)
{
if(n==1) move(a,c);
else
{
f(n-1,a,c,b);
move(a,c);
f(n-1,b,a,c);
}
}
void main()
{
int n;
scanf("%d",&n);
f(n,'a','b','c');
}
這是我的代碼 前面的是定義一個函數 這里遞歸體現在函數裡面還有函數 於是會一次又一次的計算 直到最後把N-1以前的都移到B,最下面的移到C,再把其他的從B移到C。。 無返回的話 應該是這里用void 沒有return返回數值
⑻ C語言漢諾塔問題
哥們,你還沒明白什麼叫遞歸,用tc單步執行一遍看看你就會明白了,這里說太麻煩。