汉诺塔怎么加计数次数c语言,C语言计算汉诺塔最小移动步数 (二)
前几天写的:C语言计算汉诺塔最小移动步数(一)
当时还不知道用2^n-1这个公式来求解汉诺塔移动步骤。=_=
偶然间在网上发现了这个公式,发现当时写的算法还是比较繁琐的。所以又根据这个公式又写了一个。那篇的实现是两个数组来回赋值,这个是用一个数组实现的。
代码如下:(运行结果请看上面链接)
/**************************************
* 目的:用来计算汉诺塔移动的次数
* 原理:汉诺塔的最小移动次数为2^n-1
* 时间:2012-10-31
* 平台:linux && windows
* 作者:odaynot
*/
#include int main()
{
int n, i, cf, fi, t; //n用来保存汉诺塔的层数,i用来控制循环,cf控制进位,fi用来判断第一位,t用来临时保存i值
char a[100]; //如溢出,则换用更大的数组。
a[0] = '1'; //初始化指为1
a[1] = '\0';
printf("Please enter the number of the Tower of Hanoi(3-?):");
scanf("%d", &n);
while(n--)
{
i = 0; cf = 0; fi = 0;
while(a[++i]); //获得当前数组的存储内容最大下标。以便控制循环和赋结尾符
t = i; //保存i值
if(a[0]>'4')
fi = 1;
else
fi = 0;
while(i--) {
if(a[i]>'4') {
a[i+fi] = (a[i]-'0') * 2 % 10 + cf + '0';
cf = 1;
}
else {
a[i+fi] = (a[i]-'0') * 2 + cf + '0';
cf = 0;
}
}
a[t+fi] = '\0';
if(fi)
a[0] = '1';
}
i = 0;
while(a[++i]);
a[i-1] = a[i-1]-'0'-1 + '0'; //公式2^n-1中的‘-1’操作
printf("The minimum number of moves:%s\n", a);
return 0;
}
汉诺塔怎么加计数次数c语言,C语言计算汉诺塔最小移动步数 (二)相关推荐
- 汉诺塔怎么加计数次数c语言,C语言算汉诺塔,递归时的输出是怎么一步一步来的?如图,求大神帮忙...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本程序有两个需要注意的地方: 1.函数中有两个递归,需要压栈的次数较多,第一个递归函数每次递归时后面的语句全要压栈,不管是主调函数发起的调用或者是第二个递 ...
- c语言汉诺塔移动次数,C语言计算汉诺塔最小挪动步数 (二)
C语言计算汉诺塔最小移动步数 (二) 前几天写的:C语言计算汉诺塔最小移动步数(一) 当时还不知道用2^n-1这个公式来求解汉诺塔移动步骤.=_= 偶然间在网上发现了这个公式,发现当时写的算法还是比较 ...
- Strange Towers of Hanoi 汉诺塔问题及其升级(递推)四个汉诺塔问题
今天学习递推的汉诺塔问题,非常的有趣 文章目录 1.汉诺塔问题来源 分析 2.Strange Towers of Hanoi[DP][递推] 题目大意: 思考 解题步骤: 1.汉诺塔问题来源 汉诺塔( ...
- python汉诺塔问题输入层数输出整个移动流程_python实现汉诺塔方法汇总
学习python遇到的第一个问题:汉诺塔问题的实现.首先是不知道什么是汉诺塔问题,然后是不知道怎么实现.于是百度了下,结果如下: 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵 ...
- C语言---移盘子----Hanoi(汉诺)塔问题,显示移动盘子的步骤
C语言-移盘子----Hanoi(汉诺)塔问题,显示移动盘子的步骤 在学习递归的过程中,Hanoi(汉诺)塔问题是避开不了的,很多新手在这儿一脸懵. 我们先简单介绍一些Hanoi(汉诺)塔问题到底是个 ...
- C语言递归思想实现汉诺塔
目录 1.递归思想简介 2.汉诺塔问题 3.汉诺塔递归的c语言实现 1.递归思想简介 在c语言中,程序调用自身的编程技巧称为递归( recursion). 递归的定义看上去似乎很抽象,使用代码描述能够 ...
- c语言英汉互译编程,用C语言编辑简单英汉互译词典.doc
疥详刁呆害獭荆羞哈沮蒜赫夜内淮牺彻蔼纤凤虹锥硝够唬古进淋牡振拘铅笺元扳与醒靳蹋销钡胶致石衙钦目妈而炸赚鹤邓穷窍瘴笼旬房殆查恨蠢煌沧祥斥瞩骤敌晤屏莲匆目穷妖暗屹码冬息摊挎傍啡坟范给羹哥皱做斋绥甭焕睫苍苫 ...
- 如师通语言学习软件(罗赛塔石碑)/Rosetta Stone 安装方法
打开链接后,找到如下的文件夹: 它里面有如下的内容: 然后下载来安装,安装方法如下: [Windows版本安装步骤及注意事项] 1. 确定任何杀毒软件已经禁用或关闭,并且确定所有安装任务结束,同时使用 ...
- pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动加和(rolling sum)、例如,计算某公司的多个店铺每N天(5天)的滚动销售额加和
pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动加和(rolling sum).例如,计算某公司的多个店铺每N天(5天)的滚动销售额加和 目录
最新文章
- Kotlin实战指南十:let、apply、with、run
- LateUpdate、Late、FixedUpdate的意义
- Linux异步IO实现方案总结
- 关于提高自己Java水平十大技术
- 浏览器滚动的详细解释 Vue 固定滚动位置的实现
- qt界面布局之使窗口显示出现在正中间位置
- mybatis-plus配置日志
- Npm(包管理工具)
- ibm刀片服务器如何装系统,详细分析如何安装和配置IBM刀片服务器
- CentOS6.5 安装Tomcat6
- InfluxDB在Win10安装与简单入门
- python-patterns
- 【python与数据分析】实验十三 北京市空气质量
- 为什么人人都爱油炸食物?
- 使用vuepress-reco主题创建博客
- mybatis-plus过滤不查询某一字段
- 鸿蒙HarmonyOS开发环境初识及搭建
- 九龙证券|券商春季策略扎堆来袭 风格切换成焦点
- linux下repo是什么文件夹,yum的repo文件详解、以及epel简介、yum源的更换
- 复制文件或文件夹时出错(无法复制***:没有足够的可用磁盘空间。) .