#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>/*------------------------函数申明-------------------------*/void move(char a,char b,int c); //移动函数void outputt(char a,char b,int c); //输出函数/*-----------------------定义全局变量-----------------------*//*三个数组中所放每个数据代表每个塔层,数据大小代表塔层大小(即长度)*/int x[9],y[9],z[9],count=0;int main(){ int i; char s[99]; //用s接受塔层数,然后赋值给n,这样容许一些错误输入 int n; system("color 0A"); do { system("cls"); printf("此为汉诺塔演示程序n请输入汉诺塔阶数(1-9):n"); scanf("%s",s); }while(strlen(s)!=1||s[0]<49||s[0]>57); n=s[0]-48; for(i=0;i<=n-1;i++) //初始化三个数组 x[n-1-i]=2*i+1; for(i=n;i<9;i++) x[i]=0; for(i=0;i<9;i++) y[i]=0; for(i=0;i<9;i++) z[i]=0; outputt('a','b',1); /*输出,其中的传递 ('a','b',1)没有意义 只为cfree的特殊编译需要*/ getchar(); move('x','z',n); return 0;}/*--------移动函数,将a代表的塔的上面c层移到b代表的塔上-----*/void move(char a,char b,int c){ int i,xtop,ytop,ztop; if(c==1) // 只移动一层 { for(i=0;i<9;i++) if(x[i]==0) break; xtop=i-1; for(i=0;i<9;i++) if(y[i]==0) break; ytop=i-1; for(i=0;i<9;i++) if(z[i]==0) break; ztop=i-1; if(a=='x'&&b=='y') { y[ytop+1]=x[xtop]; x[xtop]=0; } else if(a=='x'&&b=='z') { z[ztop+1]=x[xtop]; x[xtop]=0; } else if(a=='y'&&b=='x') { x[xtop+1]=y[ytop]; y[ytop]=0; } else if(a=='y'&&b=='z') { z[ztop+1]=y[ytop]; y[ytop]=0; } else if(a=='z'&&b=='x') { x[xtop+1]=z[ztop]; z[ztop]=0; } else { y[ytop+1]=z[ztop]; z[ztop]=0; } count++; outputt('a','b',1); } else // 移动多层 { if(a!='x'&&b!='x') { move(a,'x',c-1); move(a,b,1); move('x',b,c-1); } else if(a!='y'&&b!='y') { move(a,'y',c-1); move(a,b,1); move('y',b,c-1); } else { move(a,'z',c-1); move(a,b,1); move('z',b,c-1); } }}/*------------------------输出函数-------------------------*//*------------每次都是清屏再逐行输出,纯数字计算------------------------*/void outputt(char a,char b,int c){ int i,j; int p1[9],p2[9],p3[9],p4[9],p5[9],p6[9],p7[9]; for(i=0;i<9;i++) p1[i]=x[i]-(!x[i]); for(i=0;i<9;i++) p1[i]=8-(p1[i]-1)/2; for(i=0;i<9;i++) p2[i]=x[i]; for(i=0;i<9;i++) p3[i]=y[i]-(!y[i]); for(i=0;i<9;i++) p3[i]=25-(p3[i]-1)/2-p1[i]-p2[i]; for(i=0;i<9;i++) p4[i]=y[i]; for(i=0;i<9;i++) p5[i]=z[i]-(!z[i]); for(i=0;i<9;i++) p5[i]=42-(p5[i]-1)/2-p1[i]-p2[i]-p3[i]-p4[i]; for(i=0;i<9;i++) p6[i]=z[i]; for(i=0;i<9;i++) p7[i]=51-p1[i]-p2[i]-p3[i]-p4[i]-p5[i]-p6[i]; system("cls"); printf("===================此为汉诺塔演示程序===================n"); printf("=========================第%d步",count); if(count<10) printf("==========================n"); else if(count>=10&&count<100) printf("=========================n"); else printf("========================n"); printf("nnnnn"); for(i=8;i>=0;i--) { for(j=1;j<=5;j++) printf(" "); for(j=1;j<=p1[i];j++) printf(" "); for(j=1;j<=p2[i];j++) printf("%c",22); for(j=1;j<=p3[i];j++) printf(" "); for(j=1;j<=p4[i];j++) printf("%c",22); for(j=1;j<=p5[i];j++) printf(" "); for(j=1;j<=p6[i];j++) printf("%c",22); for(j=1;j<=p7[i];j++) printf(" "); printf("n"); } printf("nn按回车键继续..."); getchar();/*-----若为自动演示,可将前面两句改为for(i=0;i<2e8;i++);即可*/}
导读:目前正在解读《汉诺塔演示--c语言解释版》的相关信息,《汉诺塔演示--c语言解释版》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《汉诺塔演示--c语言解释版》的详细说明。
简介:在这里和大家分享一个用c语言程序演示的汉诺塔。
提醒:《汉诺塔演示--c语言解释版》最后刷新时间 2024-03-14 01:01:35,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《汉诺塔演示--c语言解释版》该内容的真实性请自行鉴别。