用C语言实现汉诺塔自动递归演示程序
用C语言实现汉诺塔自动递归演示程序
程序实现效果
1.变界面大小依照输入递归数改变。
2.汉诺塔自动移动演示。
3.采用gotoxy实现流畅刷新。
4.保留文字显示递归流程
程序展示及实现
github地址:https://github.com/404name/C-game

0.主体思路
输入要递归的汉诺塔数目,在原来的汉诺塔基础上新增move_play函数展示递归,用next数组存储每种移动状态。对应的从哪到哪可自动对应相应的移动方式自动移动。
1.变界面大小依照输入递归数改变
init函数按比例放大并且打印出图形界面。
2.汉诺塔自动移动演示。
int next[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; //上0 下1 左2 右3;
int turn[2][3] = { {0,3,1}, //a -> b b -> c a -> c 上右下
{0,2,1}}; //b -> a c -> b c -> a 上左下
next是移动方向,turn储存多种移动方向。
例如后台读取到是 b -> c 则读取flag为 0对饮 turn【flag】的上右下
然后依次把turn的3个值带入next实现先上当达到我设定的上界后改变第二次状态,向右达到右边设定的界限后向下移动到指定地方,结束一次移动。
3.采用gotoxy实现流畅刷新。
一开始我一直都是用cls清屏再打印,但这样刷屏很严重,后来甚至把gotoxy也一样用,后来我师傅,一位学长给我指点了下,我才发现,gotoxy是可以直接在已有图形上当作画笔一样改变,这样就实现了十分顺滑的运行。
4.保留文字显示递归流程
在屏幕下方同样用gotoxy移动到指定位置打印最基础的移动信息。
总结
这个程序是我觉得写的很巧妙的一个,本来一开始学汉诺塔时就想着为什么不能演示出来呢?但随着想象和现实相差太远,那时候我发现想很简单,但想出个框架与实现思路很难,怎么表示汉诺塔大小和如何让他自动移动是个很大的问题,后来学习了一些螺旋打印后就想到了用next去实现让他移动再加个数组存储他的移动方式,果然还是实现了。
用C语言实现汉诺塔自动递归演示程序的更多相关文章
- 关于C语言解决汉诺塔(hanoi)问题
C语言解决汉诺塔问题 汉诺塔是典型的递归调用问题: hanoi简介:印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔.不论白天黑夜,总有一个僧侣 ...
- 从"汉诺塔"经典递归到JS递归函数
前言 参考<JavaScript语言精粹> 递归是一种强大的编程技术,他把一个问题分解为一组相似的子问题,每一问题都用一个寻常解去解决.递归函数就是会直接或者间接调用自身的一种函数,一般来 ...
- 【C语言】汉诺塔问题
之前遇见这个问题,非常费劲地理解了,并写出代码,然后过段时间,再遇见这个问题,又卡住了,如此反反复复两三次,才发现自己对递归的理解依然很肤浅.今天无聊,重温<算法:c语言实现>一书,又遇见 ...
- C语言实现汉诺塔
汉诺塔 要把A柱子上的盘子移动到C柱子上,在移动过程中可以借助B柱子,但是要求小的盘子在上大的盘子在下. 解题思路: 1.把A柱子上的前N-1个盘子借助C柱子,全部移动到B柱子上(过程暂不考虑),再把 ...
- Hanio汉诺塔代码递归实现
1.背景介绍 Hanio (汉诺塔,又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘 ...
- CODEVS 3145 汉诺塔游戏 递归
题目描述 Description 汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题.在A,B,C三根柱子上,有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的 ...
- HDU 2064 汉诺塔III(递归)
题目链接 Problem Description 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘 ...
- 【Python实践-3】汉诺塔问题递归求解(打印移动步骤及计算移动步数)
# -*- coding: utf-8 -*- #汉诺塔移动问题 # 定义move(n,a,b,c)函数,接受参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量 # 然后打印出把所有盘子从A借助B ...
- 汉诺塔问题-递归实现-JAVA
public class hanio { /** * @param args */ public static void main(String[] args) { // TODO Auto-gene ...
随机推荐
- spring boot 的 userRepository无法注入的问题
No qualifying bean of type 'xxx.xxx.xxx' available: expected at least 1 bean which qualifies as auto ...
- ffifdyop——绕过中一个奇妙的字符串
根据师傅们的博客总结如下: ffifdyop 经过md5加密后:276f722736c95d99e921722cf9ed621c 再转换为字符串:'or'6<乱码> 即 'or'66� ...
- CTF实验吧——证明自己吧
题目地址:http://www.shiyanbar.com/ctf/28 没有壳 ,vc++ 写的 拖进OD观察观察,发现代码很短哟,先来看这俩个call 怀疑他们其中有正确的flag和我们输入的东西 ...
- Python+Excel 操作对比
前言 从网页爬下来的大量数据需要excel清洗成堆的科学实验数据需要导入excel进行分析作为一名面向逼格的Python程序员该如何合理而又优雅的选择生产力工具呢? 得益于辛勤劳作的python大神们 ...
- Ubuntu16手动安装OpenStack——glance篇--转
全文转自https://www.voidking.com/dev-ubuntu16-manual-openstack-glance/ 目标 紧接着<Ubuntu16手动安装OpenStack—— ...
- Dynamics 365 CRM Connected Field Service 不能接收IoT Alert
今天浪费了2,3个小时再connected field service(CFS)上面. 状况如下 1. 在CFS中添加了新的customer assets,并且点击了注册按钮. 2. 注册步骤一直在i ...
- python读取txt打印(print)出乱码的问题
如下图所示,print第一行首位出现乱码的问题 网上的解答是因为UTF-8的BOM前缀(\xef\xbb\xbf) 解决这个问题的方法很多,最快捷的方法是txt文本另存为的时候更改编码格式 将txt另 ...
- [SDOI2010]魔法猪学院(A*,最短路)
[SDOI2010]魔法猪学院(luogu) Description 题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig ...
- Linux 常用工具iptables
iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火 ...
- Jconsole或者VisualVM监控远程主机(阿里云,jdk11或者8)
准备: 1 一个war包或者jar包,这里我用springboot的 2 linux环境,安装tomcat,jdk,我用的jdk11和tomcat9,jdk11和8的拷贝权限文件路径有点不一样,这个需 ...