汉诺塔c语言 C语言汉诺塔

C\u8bed\u8a00\u6c49\u8bfa\u5854\u7a0b\u5e8f

\u5c06\u4ee5\u4e0b\u5185\u5bb9\u5168\u90e8\u590d\u5236\u5230\u65b0\u5efa\u7684\u6e90\u6587\u4ef6\u4e2d\uff1a\uff08\u672c\u4eba\u81ea\u5df1\u5199\u7684\uff0c\u56e0\u4e3a\u4f60\u90a3\u8bfe\u672c\u4e0a\u7684\u4ee3\u7801\uff0c\u6ca1\u89e3\u91ca\uff0c\u4e66\u5199\u4e0d\u89c4\u8303\uff0c\u5f88\u96be\u7406\u89e3\u6e05\u695a\uff0c\u6240\u4ee5\u6211\u76f4\u63a5\u65b0\u5199\u4e86\u4e00\u4e2a\u5b8c\u6574\u7684\u4ee3\u7801\uff0c\u9644\u5e26\u8be6\u7ec6\u8bf4\u660e\uff09
#include
//\u6c49\u8bfa\u5854x\u5c42\u5854\u4eceA\u5854\u6574\u4f53\u642c\u5230C\u5854\uff0c\u4e2d\u95f4\u4e34\u65f6B\u5854\u3002
//x\u5c42\u5854\u662f\u4ece\u5927\u5230\u5c0f\u5f80\u4e0a\u53e0\u653e\u3002\u6bcf\u6b21\u79fb\u52a8\u53ea\u80fd\u79fb\u52a8\u4e00\u5c42\u5854\u3002\u5e76\u4e14\u5728\u79fb\u52a8\u8fc7\u7a0b\u4e2d\u5fc5\u987b\u4fdd\u8bc1\u5c0f\u5c42\u5728\u4e0a\u8fb9
//\u501f\u52a9B\u5854\u53ef\u4ee5\u5c06x\u5c42\u5854\u5168\u90e8\u4eceA\u642c\u5230C\u4e0a\uff0c\u5e76\u4e14\u7b26\u5408\u8981\u6c42\uff08\u5728\u79fb\u52a8\u8fc7\u7a0b\u4e2d\u5927\u7684\u90a3\u5757\u5728\u4e0b\u8fb9\uff0c\u5c0f\u7684\u90a3\u5757\u5728\u4e0a\u8fb9\uff09
int main()
{
void tower(int x,char a,char b,char c);//\u58f0\u660e\u51fd\u6570
int x=5,a='A',b='B',c='C';//x\u8868\u793a\u67095\u5c42\u5854\uff0c\u5177\u4f53\u8981\u591a\u5c11\u5c42\u81ea\u5df1\u4fee\u6539\u8fd9\u4e2a\u503c\u3002abc\u5206\u522b\u8868\u793aABC\u5854\u3002

tower(x,a,b,c);//x\u5c42\u5854\u4ecea\u79fb\u52a8\u5230c\u7684\u5168\u8fc7\u7a0b\uff0c\u4e3b\u7a0b\u5e8f\u53ea\u6709\u8fd9\u6761\u6709\u6548\u8bed\u53e5

return 0;
}

//\u4ee5\u4e0b\u662ftower\u51fd\u6570\u7684\u5b9a\u4e49
//\u53c2\u6570\u89e3\u6790\uff1ax\u5c42\u5854\u653e\u5728a\u4e0a\uff0cb\u662f\u4e2d\u95f4\u5854\uff0cc\u662f\u76ee\u6807\u5854\u3002\u5373x\u5c42\u5854\u8981\u4ecea\u642c\u5230c\u4e0a\u3002
//\u6b64\u51fd\u6570\u5b9e\u73b0x\u5c42\u5854\u4ecea\u6574\u4f53\u8f6c\u79fb\u5230c\u4e0a\u3002\u4ee5\u53ca\u8fd9\u4e2a\u8fc7\u7a0b\u662f\u600e\u4e48\u642c\u7684\u5168\u90e8\u8fc7\u7a0b\u3002
void tower(int x,char a,char b,char c)
{
if(x==1)printf("\u5c06%d\u4ece%c\u653e\u5230%c\n",x,a,c);//\u53ea\u67091\u5c42\u5854\u65f6\uff0c\u76f4\u63a5\u4ecea\u642c\u5230c\u4e0a\u3002
else //\u4e0d\u6b621\u5c42\u5854\uff0c\u5219\u5148\u5c06x-1\u5c42\u5854\u4ecea\u6309\u7167\u89c4\u5f8b\u642c\u5230b\u4e0a\uff0c\u518d\u5c06\u6700\u540e\u4e00\u5757\u4ecea\u642c\u5230c\u4e0a\uff0c\u6700\u540e\u518d\u5c06b\u4e0a\u7684x-1\u5c42\u5854\u6309\u7167\u89c4\u5f8b\u642c\u5230c\u4e0a\u3002
{
tower(x-1,a,c,b);//\u5148\u5c06x-1\u5c42\u5854\u4ecea\u6309\u7167\u89c4\u5f8b\u642c\u5230b\u4e0a\uff0c\u6ce8\u610f\u53c2\u6570b\u653e\u5728\u6700\u540e\uff0c\u56e0\u4e3a\u653e\u5728\u6700\u540e\u7684\u53c2\u6570\u662f\u51c6\u5907\u642c\u8fc7\u53bb\u7684\u76ee\u6807\u5854\u3002
printf("\u5c06%d\u4ece%c\u653e\u5230%c\n",x,a,c);//\u5c06\u6700\u540e\u4e00\u5757\u4ecea\u642c\u5230c\u4e0a
tower(x-1,b,a,c);//\u6700\u540e\u518d\u5c06b\u4e0a\u7684x-1\u5c42\u5854\u6309\u7167\u89c4\u5f8b\u642c\u5230c\u4e0a\uff0c\u6ce8\u610f\u53c2\u6570b\u653e\u5728\u5f00\u5934\uff0c\u56e0\u4e3ax-1\u5c42\u662f\u8981\u4eceb\u4e0a\u642c\u8fc7\u53bb\u7684\u3002
}
}

\u8981\u770b\u61c2\u9012\u5f52\u7a0b\u5e8f\uff0c\u5f80\u5f80\u5e94\u5148\u4ece\u6700\u7b80\u5355\u60c5\u51b5\u770b\u8d77\u3002\u5148\u770bhanoi(1, one, two, three)\u7684\u60c5\u51b5\u3002\u8fd9\u65f6\u76f4\u63a5\u5c06one\u67f1\u4e0a\u7684\u4e00\u4e2a\u76d8\u5b50\u642c\u5230three\u67f1\u4e0a\u3002\u6ce8\u610f\uff0c\u8fd9\u91ccone\u67f1\u6216three\u67f1\u5230\u5e95\u662fA\u3001B\u8fd8\u662fC\u5e76\u4e0d\u91cd\u8981\uff0c\u8981\u8bb0\u4f4f\u7684\u662f\u51fd\u6570\u7b2c\u4e8c\u4e2a\u53c2\u6570\u4ee3\u8868\u7684\u67f1\u4e0a\u7684\u4e00\u4e2a\u76d8\u88ab\u642c\u5230\u7b2c\u56db\u4e2a\u53c2\u6570\u4ee3\u8868\u7684\u67f1\u4e0a\u3002\u4e3a\u65b9\u4fbf\uff0c\u5c06\u8fd9\u4e2a\u52a8\u4f5c\u8bb0\u4e3a\uff1aone =\u300bthree\u518d\u770bhanoi(2, one, two, three)\u7684\u60c5\u51b5\u3002\u8003\u8651\u5230hanoi(1)\u7684\u60c5\u51b5\u5df2\u7ecf\u5206\u6790\u8fc7\u4e86\uff0c\u53ef\u77e5\u8fd9\u65f6\u5b9e\u9645\u4e0a\u5c06\u4ea7\u751f\u4e09\u4e2a\u52a8\u4f5c\uff0c\u5206\u522b\u662f\uff1aone =\u300btwoone =\u300bthreetwo =\u300bthree\u5f88\u663e\u7136\uff0c\u8fd9\u5b9e\u9645\u4e0a\u76f8\u5f53\u4e8e\u5c06one\u67f1\u4e0a\u7684\u4e24\u4e2a\u76d8\u76f4\u63a5\u642c\u5230three\u67f1\u4e0a\u3002\u518d\u770bhanoi(3, one, two, three)\u7684\u60c5\u51b5\u3002\u5206\u6790hanoi(2, one , three, two)one =\u300bthreehanoi(2, two, one, three)\u5373\uff1a\u5148\u5c06one\u67f1\u4e0a\u7684\u4e24\u4e2a\u76d8\u642c\u5230two\u67f1\u4e0a\uff0c\u518d\u5c06one\u67f1\u4e0a\u7684\u4e00\u4e2a\u76d8\u642c\u5230three\u67f1\u4e0a\uff0c\u6700\u540e\u518d\u5c06two\u67f1\u4e0a\u7684\u4e24\u4e2a\u76d8\u642c\u5230three\u67f1\u4e0a\u3002\u8fd9\u4e0d\u5c31\u7b49\u4e8e\u5c06one\u67f1\u4e0a\u7684\u4e09\u4e2a\u76d8\u76f4\u63a5\u642c\u5230three\u67f1\u4e0a\u5417\uff1f\u8fd0\u7528\u5f52\u7eb3\u6cd5\u53ef\u77e5\uff0c\u5bf9\u4efb\u610fn\uff0chanoi(n-1, one , three, two)one =\u300bthreehanoi(n-1, two, one, three)\u5c31\u662f\u5148\u5c06one\u67f1\u4e0a\u7684n-1\u4e2a\u76d8\u642c\u5230two\u67f1\u4e0a\uff0c\u518d\u5c06one\u67f1\u4e0a\u7684\u4e00\u4e2a\u76d8\u642c\u5230three\u67f1\u4e0a\uff0c\u6700\u540e\u518d\u5c06two\u67f1\u4e0a\u7684n-1\u4e2a\u76d8\u642c\u5230three\u67f1\u4e0a\u3002\u8fd9\u5c31\u662f\u6211\u4eec\u6240\u9700\u8981\u7684\u7ed3\u679c\uff01

#include<stdio.h>
void movedisc(unsigned n,char fromneedle,char toneedle,char usingneedle);
int i=0;
int main()
{
unsigned n;
printf("please enter the number of disc:");
scanf("%d",&n); /*输入N值*/
printf("\tneedle:\ta\t b\t c\n");
movedisc(n,'a','c','b'); /*从A上借助B将N个盘子移动到C上*/
printf("\t Total: %d\n",i);
}
void movedisc(unsigned n,char fromneedle,char toneedle,char usingneedle)
{
if(n>0)
{
movedisc(n-1,fromneedle,usingneedle,toneedle);
/*从fromneedle上借助toneedle将N-1个盘子移动到usingneedle上*/
++i;
switch(fromneedle) /*将fromneedle 上的一个盘子移到toneedle上*/
{
case 'a': switch(toneedle)
{
case 'b': printf("\t[%d]:\t%2d.........>%2d\n",i,n,n);
break;
case 'c': printf("\t[%d]:\t%2d...............>%2d\n",i,n,n);
break;
}
break;
case 'b': switch(toneedle)
{
case 'a': printf("\t[%d]:\t%2d<...............>%2d\n",i,n,n);
break;
case 'c': printf("\t[%d]:\t %2d........>%2d\n",i,n,n);
break;
}
break;
case 'c': switch(toneedle)
{
case 'a': printf("\t[%d]:\t%2d<............%2d\n",i,n,n);
break;
case 'b': printf("\t[%d]:\t%2d<........%2d\n",i,n,n);
break;
}
break;
}
movedisc(n-1,usingneedle,toneedle,fromneedle);
/*从usingneedle上借助fromneedle将N-1个盘子移动到toneedle上*/
}
}

我给你个最经典的解法:
#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);
}

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 );
}
}

main()

{
int m;

printf( "Input the number of diskes: " );

scanf( "%d", &m );

printf( "The step to moving %3d dusjes:\n", m );

hanoi( m, 'A', 'B', 'C' );

getch();
return 0;

}
其中
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 );
}
}

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

void hanoi(int n,char one,char two,char three)
{
if(n>0)
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}

main()
{
int m;
printf("input the number of the disk:");
scanf("%d",&m);
hanoi(m,'A','B','C');
}

什么情况啊

  • c璇█璇佹槑姹夎濉娆℃暟鍏紡
    绛旓細c璇█璇佹槑姹夎濉娆℃暟鍏紡锛歠(k+1锛=2*f(k)+1鏉ヨ绠椼俰nclude<stdio.h> usingnamespacestd defineMOD1000000 longlongcal锛坙onglonga锛宨ntn锛宨ntm锛塴onglongans=1 a=a%m while锛坣锛塧ns=锛坅ns*a锛%m n=n>>1 a=锛坅*a锛%m锛// returnans锛沬ntmain锛坴oid锛塱ntn锛宨锛宮锛宎ns scanf锛"%d"...
  • 鐢C璇█浠g爜鏉ョ紪鍐欏惈姹夎濉闂,鍒╃敤鍫嗘爤鏉ュ疄鐜.姹備唬鐮
    绛旓細绠楁硶鎬濇兂 瀵逛簬姹夎濉闂锛屽綋鍙Щ鍔ㄤ竴涓渾鐩樻椂锛岀洿鎺ュ皢鍦嗙洏浠 A 閽堢Щ鍔ㄥ埌 C 閽堛傝嫢绉诲姩鐨勫渾鐩樹负 n(n>1)锛屽垯鍒嗘垚鍑犳璧帮細鎶 (n-1) 涓渾鐩樹粠 A 閽堢Щ鍔ㄥ埌 B 閽堬紙鍊熷姪 C 閽堬級锛汚 閽堜笂鐨勬渶鍚庝竴涓渾鐩樼Щ鍔ㄥ埌 C 閽堬紱B 閽堜笂鐨 (n-1) 涓渾鐩樼Щ鍔ㄥ埌 C 閽堬紙鍊熷姪 A 閽堬級銆傛瘡鍋氫竴閬嶏紝绉诲姩...
  • 濡備綍鍋氫竴涓C璇█缂栫▼鐨姹夎濉娓告垙?
    绛旓細include\x0d\x0a void move(char x,char y)\x0d\x0a {\x0d\x0a printf("%c-->%c\n",x,y);\x0d\x0a }\x0d\x0a void hanoi(int n,char one ,char two,char three)\x0d\x0a {\x0d\x0a if(n==1) move(one,three);\x0d\x0a else\x0d\x0...
  • 鍦ㄧ紪鍐C璇█绋嬪簭姹傝В姹夎濉闂鏃舵庢牱琛ㄧず姣忎竴姝ユ槸绗嚑姝?
    绛旓細鎮ㄥソ锛屽彲浠ヨ繖鏍 姹夎濉锛圚anoi锛夋槸蹇呴』鐢ㄩ掑綊鏂规硶鎵嶈兘瑙e喅鐨勭粡鍏搁棶棰樸傚畠鏉ヨ嚜浜庡嵃搴︾璇濄備笂甯濆垱閫犱笘鐣屾椂浣滀簡涓夋牴閲戝垰鐭虫煴瀛愶紝鍦ㄧ涓鏍规煴瀛愪笂浠庝笅寰涓婃寜澶у皬椤哄簭鎽炵潃64鐗囬粍閲戝渾鐩橈紝濡傚浘7-3鎵绀恒備笂甯濆懡浠ゅ﹩缃楅棬鎶婂渾鐩樹粠涓嬮潰寮濮嬫寜澶у皬椤哄簭閲嶆柊鎽嗘斁鍒扮浜屾牴鏌卞瓙涓婏紝骞朵笖瑙勫畾锛屾瘡娆″彧鑳界Щ鍔ㄤ竴涓渾鐩橈紝鍦ㄥ皬鍦嗙洏...
  • 姹夎濉攃璇█
    绛旓細movedisc(n,'a','c','b'); /*浠嶢涓婂熷姪B灏哊涓洏瀛愮Щ鍔ㄥ埌C涓*/ printf("\t Total: %d\n",i);} void movedisc(unsigned n,char fromneedle,char toneedle,char usingneedle){ if(n>0){ movedisc(n-1,fromneedle,usingneedle,toneedle);/*浠巉romneedle涓婂熷姪toneedle灏哊-1涓洏瀛...
  • 鎬!!!姹姹夎濉攃璇█鍔ㄧ敾婕旂ず绋嬪簭!!!
    绛旓細int pan[3];void dizuo(){ setlinestyle(PS_SOLID,NULL,4); line(20,400,160,400); line(90,200,90,400); line(220,400,360,400); line(290,200,290,400); line(420,400,560,400); line(490,200,490,400);}//鍒濆鍖姹夎濉void hanoi_draw(...
  • C璇█姹夎濉闂濡傛灉绉诲姩鍗佸叚涓洏绋嬪簭杩愯鏃堕棿鏄涔呯敤time鍑芥暟?_鐧惧害...
    绛旓細鍙互浣跨敤C璇█鏍囧噯搴撲腑鐨則ime.h澶存枃浠朵腑鐨刢lock()鍑芥暟鏉ヨ幏鍙栫▼搴忚繍琛屾椂闂淬傚叿浣撶殑鏂规硶濡備笅锛氬湪绋嬪簭寮濮嬭繍琛屾椂锛岃皟鐢╟lock()鍑芥暟锛岃幏鍙栧綋鍓嶇郴缁熸椂闂达紝骞跺皢缁撴灉淇濆瓨鍦ㄤ竴涓彉閲忎腑锛屽start_time銆傜▼搴忔墽琛屽畬姣曞悗锛屽啀娆¤皟鐢╟lock()鍑芥暟锛岃幏鍙栧綋鍓嶇郴缁熸椂闂达紝骞跺皢缁撴灉淇濆瓨鍦ㄥ彟涓涓彉閲忎腑锛屽end_time銆傝绠楃▼搴...
  • 姹夎濉鐨C璇█浠g爜鎬庝箞鍐欏晩
    绛旓細hanoi('a','b','c',n,num);} void move(char x,char y,struct H num[3])/*绉诲姩鐨勫叿浣撹繃绋*/ { int i;char num1[3],num2[3];sprintf(num1,"%c",x-32);/*灏嗗皬鍐欏彉鎴愬ぇ鍐欙紝骞惰浆鎹㈡垚瀛楃涓茶緭鍑*/ sprintf(num2,"%c",y-32);setfillstyle(SOLID_FILL,BLACK);/*鎶婂師鏉ョ殑鍦版柟...
  • C璇█姹夎濉绋嬪簭
    绛旓細//姹夎濉x灞傚浠嶢濉旀暣浣撴惉鍒癈濉旓紝涓棿涓存椂B濉斻//x灞傚鏄粠澶у埌灏忓線涓婂彔鏀俱傛瘡娆$Щ鍔ㄥ彧鑳界Щ鍔ㄤ竴灞傚銆傚苟涓斿湪绉诲姩杩囩▼涓繀椤讳繚璇佸皬灞傚湪涓婅竟 //鍊熷姪B濉斿彲浠ュ皢x灞傚鍏ㄩ儴浠嶢鎼埌C涓婏紝骞朵笖绗﹀悎瑕佹眰锛堝湪绉诲姩杩囩▼涓ぇ鐨勯偅鍧楀湪涓嬭竟锛屽皬鐨勯偅鍧楀湪涓婅竟锛塱nt main(){ void tower(int x,char a,char b...
  • 姹夎濉闂鐨C璇█绋嬪簭搴旇鎬庝箞鍐?骞惰璇存槑涓涓嬪師鍥
    绛旓細鍏跺疄涓昏灏辨槸涓変釜姝ラ锛氱涓锛屾妸a涓婄殑n-1涓洏閫氳繃c绉诲姩鍒癰銆傜浜岋紝鎶奱涓婄殑鏈涓嬮潰鐨勭洏绉诲埌c銆傜涓夛紝鍥犱负n-1涓洏鍏ㄥ湪b涓婁簡锛屾墍浠ユ妸b褰撳仛a閲嶅浠ヤ笂姝ラ灏卞ソ浜嗐#include<stdio.h> void move(int n,char a,char b,char c){ if(n==1) printf("\t%c->%c\n",a,c); //...
  • 扩展阅读:汉诺塔教学视频 ... 汉诺塔十句口诀 ... 汉诺塔游戏手机版 ... 汉诺塔python编程 ... 汉诺塔编程题 ... 汉诺塔5层最快口诀 ... 汉诺塔图解一步一图 ... 汉诺塔代码c++实现 ... 汉诺塔移动次数c语言 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网