汉诺塔演示--c语言解释版

来源:本站
导读:目前正在解读《汉诺塔演示--c语言解释版》的相关信息,《汉诺塔演示--c语言解释版》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《汉诺塔演示--c语言解释版》的详细说明。
简介:在这里和大家分享一个用c语言程序演示的汉诺塔。

#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语言解释版》最后刷新时间 2024-03-14 01:01:35,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《汉诺塔演示--c语言解释版》该内容的真实性请自行鉴别。