C语言游戏汉诺塔的运行过程! 如何做一个C语言编程的汉诺塔游戏?要有源代码。

C\u8bed\u8a00--\u6c49\u8bfa\u5854\u7a0b\u5e8f\u6267\u884c\u6b65\u9aa4

\u8fd9\u4e2a\u95ee\u9898\u4f60\u8981\u5148\u628a\u9012\u5f52\u641e\u61c2\u624d\u80fd\u7406\u89e3\u7684, \u6700\u597d\u662f\u5355\u8ddf\u8e2a\u6267\u884c\u4e00\u4e0b, \u6211\u8fd9\u91cc\u5c31\u7b80\u5355\u8bf4\u4e00\u4e0b\u5427!
hanoi(5, 'a', 'b', 'c');\u628a5\u4e2a\u4ece'a'\u79fb\u5230'c'
\u8fd9\u65f6n=5, noe='a', two='b', three='c'
\u56e0\u4e3an!=1, \u6267\u884celse\u91cc\u7684
hanoi( 4, 'a', 'c', 'b'); //\u628a\u4e0a\u97624\u4e2a\u4ecea\u79fb\u5230b
move( 'a', 'c'); //\u628a\u7b2c5\u4e2a\u4ecea\u79fb\u5230c
hanoi( 4, 'b', 'a', 'c'); //\u518d\u628a\u90a34\u4e2a\u4eceb\u79fb\u5230c
\u4e0a\u9762\u7684\u5f88\u597d\u660e\u767d\u7684, \u518d\u5206\u6790hanoi( 4, 'a', 'c', 'b'); //\u628a\u4e0a\u97624\u4e2a\u4ecea\u79fb\u5230b,\u4e5f\u662f\u6267\u884celse
hanoi( 3, 'a', 'b', 'c'); //\u628a\u4e0a\u97623\u4e2a\u4ecea\u79fb\u5230c
move( 'a', 'b'); //\u628a\u7b2c4\u4e2a\u4ecea\u79fb\u5230b
hanoi( 4, 'c', 'a', 'b'); //\u518d\u628a\u90a33\u4e2a\u4ecec\u79fb\u5230b

\u4e00\u76f4\u5230n=1\u624d\u7ed3\u675f

#include
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 disks:");
scanf("%d",&m);
printf("the step to moving %3d diskes:\n",m);
hanoi(m,'A','B','C');
}
\u7b97\u6cd5\u4ecb\u7ecd\uff1a
\u5176\u5b9e\u7b97\u6cd5\u975e\u5e38\u7b80\u5355\uff0c\u5f53\u76d8\u5b50\u7684\u4e2a\u6570\u4e3an\u65f6\uff0c\u79fb\u52a8\u7684\u6b21\u6570\u5e94\u7b49\u4e8e2^n \u2013 1\uff08\u6709\u5174\u8da3\u7684\u53ef\u4ee5\u81ea\u5df1\u8bc1\u660e\u8bd5\u8bd5\u770b\uff09\u3002\u540e\u6765\u4e00\u4f4d\u7f8e\u56fd\u5b66\u8005\u53d1\u73b0\u4e00\u79cd\u51fa\u4eba\u610f\u6599\u7684\u7b80\u5355\u65b9\u6cd5\uff0c\u53ea\u8981\u8f6e\u6d41\u8fdb\u884c\u4e24\u6b65\u64cd\u4f5c\u5c31\u53ef\u4ee5\u4e86\u3002\u9996\u5148\u628a\u4e09\u6839\u67f1\u5b50\u6309\u987a\u5e8f\u6392\u6210\u54c1\u5b57\u578b\uff0c\u628a\u6240\u6709\u7684\u5706\u76d8\u6309\u4ece\u5927\u5230\u5c0f\u7684\u987a\u5e8f\u653e\u5728\u67f1\u5b50A\u4e0a\uff0c\u6839\u636e\u5706\u76d8\u7684\u6570\u91cf\u786e\u5b9a\u67f1\u5b50\u7684\u6392\u653e\u987a\u5e8f\uff1a\u82e5n\u4e3a\u5076\u6570\uff0c\u6309\u987a\u65f6\u9488\u65b9\u5411\u4f9d\u6b21\u6446\u653e A B C\uff1b
\u82e5n\u4e3a\u5947\u6570\uff0c\u6309\u987a\u65f6\u9488\u65b9\u5411\u4f9d\u6b21\u6446\u653e A C B\u3002
\uff081\uff09\u6309\u987a\u65f6\u9488\u65b9\u5411\u628a\u5706\u76d81\u4ece\u73b0\u5728\u7684\u67f1\u5b50\u79fb\u52a8\u5230\u4e0b\u4e00\u6839\u67f1\u5b50\uff0c\u5373\u5f53n\u4e3a\u5076\u6570\u65f6\uff0c\u82e5\u5706\u76d81\u5728\u67f1\u5b50A\uff0c\u5219\u628a\u5b83\u79fb\u52a8\u5230B\uff1b\u82e5\u5706\u76d81\u5728\u67f1\u5b50B\uff0c\u5219\u628a\u5b83\u79fb\u52a8\u5230C\uff1b\u82e5\u5706\u76d81\u5728\u67f1\u5b50C\uff0c\u5219\u628a\u5b83\u79fb\u52a8\u5230A\u3002
\uff082\uff09\u63a5\u7740\uff0c\u628a\u53e6\u5916\u4e24\u6839\u67f1\u5b50\u4e0a\u53ef\u4ee5\u79fb\u52a8\u7684\u5706\u76d8\u79fb\u52a8\u5230\u65b0\u7684\u67f1\u5b50\u4e0a\u3002\u5373\u628a\u975e\u7a7a\u67f1\u5b50\u4e0a\u7684\u5706\u76d8\u79fb\u52a8\u5230\u7a7a\u67f1\u5b50\u4e0a\uff0c\u5f53\u4e24\u6839\u67f1\u5b50\u90fd\u975e\u7a7a\u65f6\uff0c\u79fb\u52a8\u8f83\u5c0f\u7684\u5706\u76d8\u3002\u8fd9\u4e00\u6b65\u6ca1\u6709\u660e\u786e\u89c4\u5b9a\u79fb\u52a8\u54ea\u4e2a\u5706\u76d8\uff0c\u4f60\u53ef\u80fd\u4ee5\u4e3a\u4f1a\u6709\u591a\u79cd\u53ef\u80fd\u6027\uff0c\u5176\u5b9e\u4e0d\u7136\uff0c\u53ef\u5b9e\u65bd\u7684\u884c\u52a8\u662f\u552f\u4e00\u7684\u3002
\uff083\uff09\u53cd\u590d\u8fdb\u884c\uff081\uff09\uff082\uff09\u64cd\u4f5c\uff0c\u6700\u540e\u5c31\u80fd\u6309\u89c4\u5b9a\u5b8c\u6210\u6c49\u8bfa\u5854\u7684\u79fb\u52a8\u3002
\u6240\u4ee5\u7ed3\u679c\u975e\u5e38\u7b80\u5355\uff0c\u5c31\u662f\u6309\u7167\u79fb\u52a8\u89c4\u5219\u5411\u4e00\u4e2a\u65b9\u5411\u79fb\u52a8\u91d1\u7247\uff1a
\u59823\u9636\u6c49\u8bfa\u5854\u7684\u79fb\u52a8\uff1aA\u2192C,A\u2192B,C\u2192B,A\u2192C,B\u2192A,B\u2192C,A\u2192C
\u6c49\u8bfa\u5854\u95ee\u9898\u4e5f\u662f\u7a0b\u5e8f\u8bbe\u8ba1\u4e2d\u7684\u7ecf\u5178\u9012\u5f52\u95ee\u9898\uff0c\u4e0b\u9762\u6211\u4eec\u5c06\u7ed9\u51fa\u9012\u5f52\u548c\u975e\u9012\u5f52\u7684\u4e0d\u540c\u5b9e\u73b0\u6e90\u4ee3\u7801\u3002

这样写我还没有见过,感觉不怎么样,我见过一种写法(伪代码)
假设初始状态从左到右依次是柱BAC,盘子在A上(顺序其实无所谓),目标从A到C,即右移
N是盘子个数目,+1表示右移,如果到了已经在最右边,直接循环到最左边的;-1表示与此正好相反
伪代码
void hanoi(int N,int d)//d=1
{
if(N == 0) return;
hanoi(N-1, -d);
shift(N, d);
hanoi(N-1, -d);
}
相当于把N-1个盘子(假如大小依次是123~N-1)左移到A,然后把最大的盘子(N)移动到C,然后N-1个盘子左移(循环到最右边了),就OK了。
递归就是用计算机实现数学的数学归纳法。

hanoi(n-1,a,c,b);
printf("%d->%d\n",a,c);
hanoi(n-1,b,a,c);
如楼上诸位所说,这三句的用处是:如果要将A上的n块盘子移动到C,则先将上面的n-1块移动到B,再将最下面的那块(也是最大的)移动到C(printf这句的含义),然后将B上的n-1块移动到C。而从B移动n-1块到C的方法一样,先移动上面的n-2块到A,再将第二大的盘子移动到C,再将A上的n-2块移动到C。hanoi(n-1,b,a,c)会转化成hanoi(n-2, b, c, a);printf("%d->%d\n", b, c);hanoi(n-2, a, b, c);这样的三句(假设n-2>1)。
这里用到一个基本思想,就是任何一个最大的盘子移到到C以后,就可以假设这个盘子自动消失了,C可视为空柱,需要解决的盘子由n个减少为n-1个。

将n-1层汉诺塔由a通过c移到b,打印 a-> c ,再将n-1层汉诺塔由b通过a移到c

hanoi(n-1,a,c,b)是说,将n-1个盘子从a移到b,
然后将最大的盘子移到c。
将n-1个盘子移到c座

  • ...鐢c璇█缂栧啓鐨姹夎濉閫掑綊璋冪敤浠g爜鐨勮缁嗘墽琛杩囩▼
    绛旓細鍦嗙洏閫昏緫绉诲姩杩囩▼+绋嬪簭閫掑綊杩囩▼鍒嗘瀽 Hanoi濉闂, 绠楁硶鍒嗘瀽濡備笅锛岃A涓婃湁n涓洏瀛愶紝涓轰簡渚夸簬鐞嗚В鎴戝皢n涓洏瀛愪粠涓婂埌涓嬬紪鍙1-n锛屾爣璁颁负鐩樺瓙1锛岀洏瀛2...鐩樺瓙n銆傚鏋渘=1锛屽垯灏嗏 鍦嗙洏1 鈥 浠 A 鐩存帴绉诲姩鍒 C銆傚鏋渘=2锛屽垯锛氾紙1锛夊皢A涓婄殑n-1锛堢瓑浜1锛変釜鍦嗙洏绉诲埌B涓婏紝涔熷氨鏄妸鐩1绉诲姩鍒癇...
  • C璇█姹夎濉
    绛旓細瑕佺湅鎳傞掑綊绋嬪簭锛屽線寰搴斿厛浠庢渶绠鍗曟儏鍐电湅璧枫傚厛鐪媓anoi(1, one, two, three)鐨勬儏鍐点傝繖鏃剁洿鎺ュ皢one鏌变笂鐨勪竴涓洏瀛愭惉鍒皌hree鏌变笂銆傛敞鎰忥紝杩欓噷one鏌辨垨three鏌卞埌搴曟槸A銆丅杩樻槸C骞朵笉閲嶈锛岃璁颁綇鐨勬槸鍑芥暟绗簩涓弬鏁颁唬琛ㄧ殑鏌变笂鐨勪竴涓洏琚惉鍒扮鍥涗釜鍙傛暟浠h〃鐨勬煴涓娿備负鏂逛究锛屽皢杩欎釜鍔ㄤ綔璁颁负锛歰ne =銆...
  • 鎬庢牱鐢c璇█鍥惧舰婕旂ず姹夎濉
    绛旓細outtextxy(390,420,"C");getch();/*鎺ユ敹瀛楃鍚庡氨鎵ц閫掑綊鎿嶄綔*/ 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(num...
  • C璇█姹夎濉闂,璇烽棶杩欎釜n=3鐨勮缁嗘楠ゆ槸浠涔堝憖,澶т竴鏂扮敓娌″惉鎳俖鐧 ...
    绛旓細a,c,b)锛涳紙2锛 鎶婄n涓洏瀛愮敱 A绉诲埌 C锛涳紙3锛 鎶妌-1涓洏瀛愮敱B 绉诲埌 C锛屾鏃禔浣滀负涓棿缂撳瓨椤癸紙b,a,c)锛涳紱姝ょ▼搴忚緭鍑虹殑鏃跺欙紝鐢ㄧ殑鏄1銆2銆3浠h〃涓夋牴鏌卞瓙锛屾垜缁欐敼鎴怉銆丅銆丆锛屽疄闄杩愯鎯呭喌濡備笅鎵绀猴細杩欎釜涓昏鏄湅绠楁硶锛屽啀涓涓氨鏄掑綊鐨勫涔狅紝绋嬪簭鏈韩闈炲父绠鍗曘
  • C璇█娓告垙姹夎濉旂殑杩愯杩囩▼!
    绛旓細杩欐牱鍐欐垜杩樻病鏈夎杩囷紝鎰熻涓嶆庝箞鏍凤紝鎴戣杩囦竴绉嶅啓娉曪紙浼唬鐮侊級鍋囪鍒濆鐘舵佷粠宸﹀埌鍙充緷娆℃槸鏌盉AC锛岀洏瀛愬湪A涓婏紙椤哄簭鍏跺疄鏃犳墍璋擄級锛岀洰鏍囦粠A鍒癈锛屽嵆鍙崇Щ N鏄洏瀛愪釜鏁扮洰锛+1琛ㄧず鍙崇Щ锛屽鏋滃埌浜嗗凡缁忓湪鏈鍙宠竟锛岀洿鎺ュ惊鐜埌鏈宸﹁竟鐨勶紱-1琛ㄧず涓庢姝eソ鐩稿弽 浼唬鐮 void hanoi锛坕nt N,int d锛//d=1 { ...
  • 鎬庢牱鐢C璇█缂栫綏姹夊?
    绛旓細杩欓噷浣犺鍏堝亣璁捐繖鏍风殑鍑芥暟鑳藉疄鐜版湰鍔熻兘锛墋 else { NuoYiWei(FromTa,ToTa);//灏卞墿涓涓鎸姩浜嗗氨鐩存帴鎸姩 } } 杩欎釜鍑芥暟鏄湪C++閲屽啓鐨勶紝濡傛灉鐢C璇█杩樿娉ㄦ剰浜涖傛垜杩欓噷杩樻湁鐢–鍐欑殑姹夎濉旂殑绋嬪簭锛屼綘缁欐垜閭[email protected]鍙戦偖浠剁储瑕佸惂锛岃娓呮瑕佷簺浠涔堛
  • 灏嗕笅闈㈣繖涓鐢C璇█缂栫▼ 鎰熻阿澶х
    绛旓細/* 姹夎濉 hannota.c */ include / 瑙f硶锛氬鏋滄煴瀛愭爣涓篈BC锛岃鐢盇鎼嚦C锛屽湪鍙湁涓涓洏瀛愭椂锛屽氨灏嗗畠鐩存帴鎼嚦C锛屽綋鏈変袱涓洏瀛愶紝灏卞皢B褰撲綔杈呭姪鏌便傚鏋滅洏鏁拌秴杩2涓紝灏嗙涓変釜浠ヤ笅鐨勭洏瀛愰伄璧锋潵锛屽氨寰堢畝鍗曚簡锛屾瘡娆″鐞嗕袱涓洏瀛愶紝涔熷氨鏄細A->B銆丄->C銆丅->C杩欎笁涓楠わ紝鑰岃閬綇鐨勯儴浠斤紝鍏跺疄...
  • 楂樻墜甯繖鐪嬩笅杩欎釜C璇█瀹炵幇鐨勫叧浜姹夎濉闂鐨勭▼搴
    绛旓細include<stdio.h> /* Copyrighter by SS7E */ void hanoi(int n,char A,char B,char C) /* Copyrighter by SS7E */ { //褰撴寚鍓╀竴鍧楁槸锛屾妸A绉诲埌C if(n==1){ //杩欓噷鐨凙C涓嶆槸鎸嘇C锛岃屾槸鎸囧嚱鏁颁紶杩囨潵鐨勫弬鏁扮殑绗竴涓拰绗笁涓 //渚嬪杩欏彞 hanoi(n-1,A,C,B); 杩欐椂A鎸嘇锛孋...
  • 姹夎濉攃璇█绠楁硶銆傛敞鎰忔槸绠楁硶
    绛旓細鎴戜互鍓嶆敹钘忎簡涓涓埆浜虹殑鍥炵瓟锛屼綘鐪嬬湅鍚э細閫掑綊绠楁硶鐨勫嚭鍙戠偣涓嶆槸鐢卞垵濮嬫潯浠跺嚭鍙戯紝鑰屾槸鎶婂嚭鍙戠偣鏀惧湪姹傝В鐨勭洰鏍囦笂锛屼粠鎵姹傜殑鏈煡椤瑰嚭鍙戦愭璋冪敤鏈韩鐨勬眰瑙杩囩▼锛岀洿鍒伴掑綊鐨勮竟鐣岋紙鍗冲垵濮嬫潯浠讹級銆姹夎濉闂鐨勯噸鐐规槸鍒嗘瀽绉诲姩鐨勮鍒欙紝鎵惧埌瑙勫緥鍜岃竟鐣屾潯浠躲傝嫢闇瑕佸皢n涓洏瀛愪粠A绉诲姩鍒C灏遍渶瑕侊紙1锛夊皢n-1涓洏瀛愪粠A...
  • c璇█ 姹夎濉
    绛旓細鍥犱负if (n==1) printf("%c-->%c\n",a,c)杩欓噷灏戣緭鍏ヤ簡涓涓垎鍙凤紝鍦ㄥ悗闈㈠姞涓;灏卞彲浠ヤ簡 main(){hanoi(3,'A','B','C');} hanoi(n,a,b,c)int n;char a,b,c;{if (n==1) printf("%c-->%c\n",a,c);else{hanoi(n-1,a,c,b);printf("%c-->%c\n",a,c);hanoi...
  • 扩展阅读:少儿编程100个游戏 ... 汉诺塔游戏手机版 ... 儿童编程游戏 ... 十层汉诺塔教程视频 ... 编程一个最简单游戏 ... 汉诺塔教学视频 ... 汉诺塔图解一步一图 ... 汉诺塔的玩法视频教程 ... 汉诺塔游戏设计方案 ...

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