C语言计算汉诺塔最小移动步数(一)
来源:互联网 发布:雅思培训机构知乎 编辑:程序博客网 时间:2024/06/06 07:43
效果图:
/*************************************** 目的:用来计算汉诺塔移动的次数* 原理:找规律,如三层是7,四层是7*2+1=15,五层是15*2+1=31 ...* 时间:2012-10-27* 平台:linux && windows* 作者:odaynot*/#include <stdio.h>int main(){ char a[100], b[100];//如溢出,则换用更大的数组。 int i = 0, j = 1; int cf = 0, fi = 1;//cf为判定是否有进位 fi为first的缩写。用来使最后位+1操作。 int n; //为汉诺塔的个数。控制循环次数 a[0] = '7'; a[1] = '\0'; printf("Please enter the number of the Tower of Hanoi(3-?):"); scanf("%d", &n); n-=3; while(n--) { i = 0;j = 1;fi = 1;cf = 0; //每循环一次,重新赋值,变回缺 while(b[j++] = a[i++]);//把数组a中的数据复制到b数组中 b[j] = '\0';//结尾加\0结尾符 i-=2; while(i!=-1) { if(5 > a[i]-'0') { b[i+1] = (a[i]-'0') * 2 + cf + fi + '0';//-‘0’为了把字母转换成数字进行相应运算 cf = 0; //+‘0’使其重新变回字母 } else { b[i+1] = (a[i]-'0') * 2 % 10 + cf + fi + '0'; cf = 1; } --i; fi = 0; } if(cf) { //以下语句用来把数组b中的值赋到数组a中。使其重复循环。 i = j = 1; while(a[i++] = b[j++]); a[i] = '\0'; a[0] = '1'; } else { i = 0; j = 1; while(a[i++] = b[j++]); a[i] = '\0'; } } printf("The minimum number of moves:%s\n", a); return 0;}
- C语言计算汉诺塔最小移动步数(一)
- C语言计算汉诺塔最小移动步数 (二)
- 汉诺塔移动步数的计算
- poj 1920 汉诺塔移动到某一种指定位置的最小步数
- 网易笔试编程题:到Fibonacci数最小步数(C++)
- 【C语言】计算一个数二进制中一的位数
- NYOJ58最小步数(神搜)
- 最小步数(广搜)
- NYOJ-58-最小步数(搜索)
- nyoj 58 最小步数(bfs)
- NYOJ 58 最小步数(BFS)
- NYOJ-最小步数(bfs)
- nyoj58 最小步数(bfs)
- 最小步数
- 最小步数
- nyoj最小步数
- 最小步数
- nyoj58最小步数
- Extjs4之proxy
- ajax中如何读取前台传到后台的xml
- 基于MapWinGis的开发探索(三)--改善缩放、渲染、显示文本
- File类的一些方法测试
- Javascript日期类的使用
- C语言计算汉诺塔最小移动步数(一)
- Javascript的for..in使用
- C#常用加密方法解析
- 代码调试技巧
- 查看gcc的版本
- Javascript的history对象的back的使用
- 1004let the balloon rise
- 第九周任务之编程
- 多功能电子时钟(带时区划分,闹钟,区分上午和下午)