c语言汉诺塔移动次数,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语言 统计数量用count_c语言中统计重复数字次数 c语言问题 统计不同数字的个数...
请问c语言当中,如何统计数字各自出现的次数 请教一个问题: 在c语言当中,用数组的方法,统计输入的一串数字,统计实现代码: #include int main() { int num = 0, i = ...
- c语言递归求塔移动次数,c语言递归调用汉诺塔
递归算法的出发点不是由初始条件出发,而是把出发点放在求解的目标上,从所求的未知项出发逐次调用本身的求解过程,直到递归的边界(即初始条件). 汉诺塔问题的重点是分析移动的规则,找到规律和边界条件. 若需 ...
- c语言求寻找假币的次数,C语言经典算法 - 八枚银币问题
C语言经典算法 - 八枚银币问题 说明现有八枚银币a b c d e f g h,已知其中一枚是假币,其重量不同于真币,但不知是较轻或 较重,如何使用天平以最少的比较次数,决定出哪枚是假币,并得知假币 ...
- c语言如何寻找排序最少次数,C语言快速排序比较次数问题
满意答案 wtrjTcZ9 推荐于 2018.03.21 采纳率:55% 等级:7 已帮助:458人 你可以用冒泡排序法自己试一试 目的:按要求从大到小或从小到大排序. 基本思路:对尚未排序的各 ...
- 汉诺塔怎么加计数次数c语言,C语言计算汉诺塔最小移动步数 (二)
前几天写的:C语言计算汉诺塔最小移动步数(一) 当时还不知道用2^n-1这个公式来求解汉诺塔移动步骤.=_= 偶然间在网上发现了这个公式,发现当时写的算法还是比较繁琐的.所以又根据这个公式又写了一个. ...
- 汉诺塔递归的c语言实现(递归)
对于递归来讲, 汉诺塔实际是经典到不能再经典的例子了, 每个数据结构的教材对会提到. 但是到最后只给出一段类似下面的一段代码: #include<stdio.h>void move(i ...
- 汉诺塔小游戏 c语言
相信大家在学习C语言嵌套的时候已经学习过经典问题汉诺塔了,我学习时就想能不能搞个汉诺塔的游戏出来,结果睡了一觉就给忘了.今天突然想起,搞出来与大家分享,水平一般,但符合汉诺塔规则.最终代码我放在文章最 ...
- c语言汉诺塔实验报告,C语言汉诺塔的简单了解
汉诺塔详解 以4层为例 以下为我的拙见,还希望大佬雅正 要把汉诺塔移动到c 需要把1,2,3层移到b 把4移动到c 在吧123移动到b 但是一次只能动一块 所以我们目前要做的就是把上面三块移动到b 那 ...
- 汉诺塔求次数(用递归)
Copyright(c)2013,烟台大学计算机学院学生 *All rights reserved. *文件名称:汉诺塔求次数(用递归) *作者:杨飞 *完成日期:2013年11月25日 *版本号:v ...
最新文章
- java控制台两个字符串_java控制台输入字符串
- 第四节:格式化器如何序列化类型实例
- python图片找字_如何用python查找图像中的字母
- 最感叹的莫过于一见如故,最悲伤的莫过于再见陌路。最深的孤独,是你明知道自己的渴望,却得对它装聋作哑。最美的你不是生如夏花,而是在时间的长河里,波澜不惊。...
- 使用jmap来生成堆转储快照
- python装饰器 property_介绍Python的@property装饰器的用法
- azure备份存储层分类_如何配置Azure SQL数据库长期保留(LTR)备份
- vim 编辑器 打开GB2312、GBK文件乱码解决方法
- VMware Workstation 常见问题解决
- win10系统如何设置局域网服务器地址,Win10怎么设置局域网IP地址
- 黄仁勋口述:英伟达的发展之道和星辰大海
- 数字孪生城市优秀案例汇编(2021年) 附下载
- Swift 网络请求Moya框架简单二次封装
- 简单典型二阶系统_【文献选译】二阶弹性波动方程PML的简单实现
- 如何评价一个好系统?
- 叠片过滤器:过滤器设备的普遍使用
- 中国的顶级黑客在国际上是一个什么样的水平?
- 六年级上册计算机教案人教版,人教版数学六年级上册教学设计
- mysql show master status为空值
- 如何使用WRLD构建教练假期展示柜