如何做一个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\x0a {\x0d\x0a hanoi(n-1,one,three,two);\x0d\x0a move(one,three);\x0d\x0a hanoi(n-1,two,one,three);\x0d\x0a }\x0d\x0a }\x0d\x0a main()\x0d\x0a {\x0d\x0a int m;\x0d\x0a printf("input the number of disks:");\x0d\x0a scanf("%d",&m);\x0d\x0a printf("the step to moving %3d diskes:\n",m);\x0d\x0a hanoi(m,'A','B','C');\x0d\x0a }\x0d\x0a算法介绍:\x0d\x0a 其实算法非常简单,当盘子的个数为n时,移动的次数应等于2^n _ 1(有兴趣的可以自己证明试试看)。后来一位美国学者发现一种出人意料的简单方法,只要轮流进行两步操作就可以了。首先把三根柱子按顺序排成品字型,把所有的圆盘按从大到小的顺序放在柱子A上,根据圆盘的数量确定柱子的排放顺序:若n为偶数,按顺时针方向依次摆放 A B C;\x0d\x0a 若n为奇数,按顺时针方向依次摆放 A C B。\x0d\x0a (1)按顺时针方向把圆盘1从现在的柱子移动到下一根柱子,即当n为偶数时,若圆盘1在柱子A,则把它移动到B;若圆盘1在柱子B,则把它移动到C;若圆盘1在柱子C,则把它移动到A。\x0d\x0a (2)接着,把另外两根柱子上可以移动的圆盘移动到新的柱子上。即把非空柱子上的圆盘移动到空柱子上,当两根柱子都非空时,移动较小的圆盘。这一步没有明确规定移动哪个圆盘,你可能以为会有多种可能性,其实不然,可实施的行动是唯一的。\x0d\x0a (3)反复进行(1)(2)操作,最后就能按规定完成汉诺塔的移动。\x0d\x0a 所以结果非常简单,就是按照移动规则向一个方向移动金片:\x0d\x0a 如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C\x0d\x0a 汉诺塔问题也是程序设计中的经典递归问题,下面我们将给出递归和非递归的不同实现源代码。

  • 姹夎濉擟璇█绋嬪簭
    绛旓細hanoi(int n,char a,char b,char c)//灏唍涓洏瀛愪粠a閫氳繃b绉诲姩鍒癱 { if(n==1)move(a,1,c); //灏嗙紪鍙蜂负1鐨勭洏瀛愪粠a绉诲姩鍒癱 else { hanoi(n-1,a,c,b);move(a,n,c);//灏嗙紪鍙蜂负n鐨勭洏瀛愪粠a绉诲姩鍒癱 hanoi(n-1,b,a,c);} } ...
  • c璇█ 妯℃嫙姹夎濉娓告垙鐨勮В娉
    绛旓細鍐涓涓鍑芥暟鐢ㄩ掑綊瀹炵幇 鐢╟har浠h〃鐩樺瓙,ABC浠h〃瑁呯洏瀛愮殑骞冲彴 鏈缁堝皢A涓婃墍鏈夌洏瀛愮Щ鍒癈涓 void hanoi(int n, char A, char B, char C) { if (n == 1) { move(A, C); //鍙湁涓涓洏瀛愶紝鎶婂畠浠嶢绉诲埌C涓 } else { hanoi(n-1,A,C,B);//灏咥涓妌-1涓鐩樺瓙绉诲埌B涓 move(A锛孋);...
  • C璇█姹夎濉
    绛旓細瑕佺湅鎳傞掑綊绋嬪簭锛屽線寰搴斿厛浠庢渶绠鍗曟儏鍐电湅璧枫傚厛鐪媓anoi(1, one, two, three)鐨勬儏鍐点傝繖鏃剁洿鎺ュ皢one鏌变笂鐨涓涓鐩樺瓙鎼埌three鏌变笂銆傛敞鎰忥紝杩欓噷one鏌辨垨three鏌卞埌搴曟槸A銆丅杩樻槸C骞朵笉閲嶈锛岃璁颁綇鐨勬槸鍑芥暟绗簩涓弬鏁颁唬琛ㄧ殑鏌变笂鐨勪竴涓洏琚惉鍒扮鍥涗釜鍙傛暟浠h〃鐨勬煴涓娿備负鏂逛究锛屽皢杩欎釜鍔ㄤ綔璁颁负锛歰ne =銆...
  • C璇█娓告垙姹夎濉鐨勮繍琛岃繃绋!
    绛旓細杩欐牱鍐欐垜杩樻病鏈夎杩囷紝鎰熻涓鎬庝箞鏍锛屾垜瑙佽繃涓绉嶅啓娉曪紙浼唬鐮侊級鍋囪鍒濆鐘舵佷粠宸﹀埌鍙充緷娆℃槸鏌盉AC锛岀洏瀛愬湪A涓婏紙椤哄簭鍏跺疄鏃犳墍璋擄級锛岀洰鏍囦粠A鍒癈锛屽嵆鍙崇Щ N鏄洏瀛愪釜鏁扮洰锛+1琛ㄧず鍙崇Щ锛屽鏋滃埌浜嗗凡缁忓湪鏈鍙宠竟锛岀洿鎺ュ惊鐜埌鏈宸﹁竟鐨勶紱-1琛ㄧず涓庢姝eソ鐩稿弽 浼唬鐮 void hanoi锛坕nt N,int d锛//d=1 { ...
  • 姹夎濉攃璇█
    绛旓細/*浠巉romneedle涓婂熷姪toneedle灏哊-1涓鐩樺瓙绉诲姩鍒皍singneedle涓*/ ++i;switch(fromneedle) /*灏唂romneedle 涓婄殑涓涓鐩樺瓙绉诲埌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...
  • 鐢c璇█缂栧啓绋嬪簭姹姹夎濉鐨勭Щ鍔ㄦ楠
    绛旓細hanoi(n-1,two,one,three); }} void move(char x,char y) {cout<<x<<"-->"<<y<<endl;} xw597709862 | 鍙戝竷浜2011-11-18 涓炬姤| 璇勮 0 0 涓烘偍鎺ㄨ崘: 姹夎濉旈棶棰 姹夎濉旈掑綊绠楁硶 姹夎濉攃璇█绋嬪簭浠g爜 C璇█鎴 姹夎濉旀槸浠涔 姹夎濉旀父鎴 C璇█閫掑綊姹夎濉 c璇█绋嬪簭璁捐 c璇█鍏ラ棬鑷...
  • 姹c璇█,姹夎濉旂▼搴 闈為掑綊
    绛旓細2銆佹妸闄ょ涓鐗囦互澶栵紝鍙互绉诲姩鐨勫彟澶栦竴鐗囩Щ鍔ㄥ埌鍙互绉诲姩鐨勪负姝紝杩欎釜鐪嬩技妯$硦锛屼絾鍏跺疄鍏崇郴鏄‘瀹氱殑锛岃繖涓椂鍊欏彧鏈変竴鐗囧彲浠ョЩ鍔紝鑰屼笖浣嶇疆涔熷彧鏈涓涓鍙互璁╁畠绉诲姩銆傚氨鏄繖涔堜袱涓楠わ紝鐢ㄦ潵瀹屾垚姹夎濉 涓嬮潰鏄垜鐨绋嬪簭 锛堟敞锛氭垜鍦ㄧ▼搴忎腑浣滀簡涓紛锛屽鏋滄槸濂囨暟鐗囷紝閭i『搴忎竴瀹氭槸A->C->B,锛堝叾涓瑼鏄師鏌憋紝B...
  • 鐢C璇█缂栧啓姹夎濉旂殑绋嬪簭,璋旦寮虹増C鐨勭鍥涚増鐨勮繖涓▼搴忎腑,鍙傛暟浼犻掍笉...
    绛旓細姹夎濉鏄涓涓鍒╃敤閫掑綊鍑芥暟鐨勭粡鍏镐緥瀛愶紝鍒╃敤涓涓嗗悜鐨勬濈淮杩涜瑙d綋锛岄氳繃鏈鍚庝竴姝ュ悜绗竴姝ユ帹杩
  • C璇█鍏充簬姹夎濉鐨勫皬绋嬪簭
    绛旓細void main(){ int n;printf("please input number: ");scanf("%d",&n);printf("the stemp is :\n");hounit(n,'a','b','c');}娌℃湁澶ぇ闂 涓嬫娉ㄦ剰涓鐐瑰氨琛屼簡 n鍓嶉潰涓瀹氳鍔犱笂&
  • 鎬庢牱鐢C璇█缂栫綏姹夊?
    绛旓細Nuo(MidTa,FromTa,ToTa,(NeedMove-1));//鏈鍚庢妸鎸埌涓棿濉斾笂鐨凬-1涓閮芥尓鍒扮洰鏍囧涓婏紙杩欓噷浣犺鍏堝亣璁捐繖鏍风殑鍑芥暟鑳藉疄鐜版湰鍔熻兘锛墋 else { NuoYiWei(FromTa,ToTa);//灏卞墿涓涓瑕佹尓鍔ㄤ簡灏辩洿鎺ユ尓鍔 } } 杩欎釜鍑芥暟鏄湪C++閲屽啓鐨勶紝濡傛灉鐢C璇█杩樿娉ㄦ剰浜涖傛垜杩欓噷杩樻湁鐢–鍐鐨勬眽璇哄鐨绋嬪簭锛屼綘缁欐垜...
  • 扩展阅读:c语言编译器手机版app ... 大一c语言必背编程题 ... 零基础如何自学程序员 ... 如何自己编程做游戏 ... 汉诺塔流程图c语言 ... c语言编程软件下载 ... 为什么不建议孩子学编程 ... 这三种人不适合学编程 ... cnc编程必背50个程序 ...

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