| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1596 人关注过本帖, 4 人收藏
标题:汉诺塔动画版
取消只看楼主 加入收藏
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1744
专家分:3216
注 册:2015-12-2
结帖率:100%
收藏(4)
已结贴  问题点数:20 回复次数:0 
汉诺塔动画版
#include <stdio.h>
#include <windows.h>
#define N 4
int ak[3]={0};
int x1=20,y1=40;
int temp[3][9]={0};
void HideCursor()//隐藏光标
{
     HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
     CONSOLE_CURSOR_INFO cursor_info={1,0};
     SetConsoleCursorInfo(hOut,&cursor_info);
 }

void gotoxy(int x,int y)//设置字符显示位置
{
     HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
     COORD loc={x,y};
     SetConsoleCursorPosition(hOut,loc);
     
 }
 
void move(char a,char b)
{
    int m=a-'A',n=b-'A'; //把A,B,C柱信息转为0,1,2
    int k=-1;
    Sleep(2000); //每次输出休息2秒
    switch (m){
        case 0:ak[0]--;gotoxy(20,38-ak[0]*2);printf(" ");k=temp[0][ak[0]];temp[0][ak[0]+1]=0;break; //把要移动的数字保存到k,同时清零该位置数据
        case 1:ak[1]--;gotoxy(30,38-ak[1]*2);printf(" ");k=temp[1][ak[1]];temp[1][ak[1]+1]=0;break;
        case 2:ak[2]--;gotoxy(40,38-ak[2]*2);printf(" ");k=temp[2][ak[2]];temp[2][ak[2]+1]=0;break;
    }
    switch (n){
        case 0:ak[0]++;gotoxy(20,40-ak[0]*2);printf("%d",temp[0][ak[0]-1]=k);break;//把移动到的位置数据赋值k,并打印
        case 1:ak[1]++;gotoxy(30,40-ak[1]*2);printf("%d",temp[1][ak[1]-1]=k);break;
        case 2:ak[2]++;gotoxy(40,40-ak[2]*2);printf("%d",temp[2][ak[2]-1]=k);break;
    }
   
   
}

void hanoi (int a,char m,char b,char c)
{
    if(a==0)return;
    hanoi(a-1,m,c,b); //a-1个盘子从m利用c移动到b
    move(m,c);        //把m中的一个盘子移动到c
    hanoi(a-1,b,m,c); //a-1个盘子从b利用m移动到c
}

main()
{
   HideCursor();//隐藏光标
   gotoxy(x1,y1);
   printf("A");for(int i=0;i<9;i++)printf(" ");printf("B");for(int i=0;i<9;i++)printf(" ");printf("C");//打印A,B,C柱
   for(int i=0;i<N;i++)
   {
       gotoxy(20,38-i*2);
       printf("%d",i+1);
       temp[0][i]=i+1;   //temp数组是盘子的坐标信息
       ak[0]++;
   }    //打印初始数字摆放情况
   hanoi(N,'A','B','C'); //执行移盘
   gotoxy(20,50);   
}

[此贴子已经被作者于2018-4-18 10:53编辑过]

搜索更多相关主题的帖子: int temp case printf break 
2018-04-17 20:29
快速回复:汉诺塔动画版
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022126 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved