用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 ...
随机推荐
- MVEL2.0的使用实例(一)
本文是对java整合mvel2.0的一点示例: 如果表达式中有变量,解析表达式时必须传一个map MVEL.eval(expression, vars); /** * 基本解析表达式 */@Testp ...
- 洛谷 P1463 [POI2002][HAOI2007]反素数
题目链接 题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1, ...
- Django 滑动验证
极验官网:https://www.geetest.com/ 文档: https://docs.geetest.com/ 查看 行为验证的部署文档
- CSS-12-盒子模型
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- ios--->OC中Protocol理解及在代理模式中的使用
OC中Protocol理解及在代理模式中的使用 Protocol基本概念 Protocol翻译过来, 叫做"协议",其作用就是用来声明一些方法: Protocol(协议)的作用 定 ...
- Android教程2020 - RecyclerView显示多种item
Android教程2020 - 系列总览 本文链接 前面我们已经用RecyclerView显示一些数据.也知道如何获取滑动的距离. 前面我们的列表中显示的都是同类数据.如果要在一个列表中显示不同类别的 ...
- mybatis入门案例自定义实现
mybatis入门案例自定义实现 一.需要实现的类和接口 public static void main(String[] args) throws Exception{ //1.读取配置文件 Inp ...
- Codeforces_839
A.每天更新判断. #include<bits/stdc++.h> using namespace std; ]; int main() { ios::sync_with_stdio(); ...
- Codeforces_818
A.winners总数为(k+1)diplomas. #include<bits/stdc++.h> using namespace std; long long n,k; int mai ...
- HDU_3038_并查集
http://acm.hdu.edu.cn/showproblem.php?pid=3038 并查集的应用,选择哪个点作为根结点都没关系,多了一个sum数组保存每个点到根节点的和,注意刚开始a减了1, ...