C 与 C++ 的最大区别: 在于它们的用于解决问题的思想方法不一样. 之所以说 C++ 比 C 更先进, 是因为 "设计这个概念已经被融入到 C++ 之中", 而就语言本身而言, 在 C 中更多的是算法的概念. 那么是不是 C 就不重要了, 错! 算法是程序设计的基础, 好的设计如果没有好的算法, 一样不行. 而且,"C 加上好的设计" 也能写出非常好的东西.
小编推荐一个学 C 语言 / C++ 的学习裙[ 六九九, 四七零, 五九六 ] , 无论你是大牛还是小白, 是想转行还是想入行都可以来了解一起进步一起学习! 裙内有开发工具, 很多干货和技术资料分享!
2, 移动过程中大盘子永远不能再小盘子上面.
- ///////////////////////////////////////////////////////////////
- // 递归实现汉诺塔
假设 A 柱子上共有 n 个盘子, 从上到下依次为 1,2...n;
1, 如果 n=1, 则将 A 上的盘子直接移到 C 上即可;
2, 如果 n=2, 则:
2.1, 将 A 上的第 1 个盘子移到 B;
2.2, 将 A 上的第 2 个盘子移到 C, 此时 B 上一个盘子 ;
2.3, 将 B 上的第 1 个盘子移到 C. 完成 .
3, 如果 n=3, 则:
3.1, 首先将 A 上的上 2 个盘子借助 C 移动到 B 上, 步骤:
3.1.1, 将 A 上第 1 个盘子移到 C;
3.1.2, 将 A 上第 2 个盘子移到 B;
3.1.3, 将 C 上第 1 个盘子移到 B;
3.2, 将 A 上盘子 3 移动到 C 上;
3.3, 将 B 上两个盘子借助 A 移动到 C 上, 步骤:
3.3.1, 将 B 上盘子 1 移动到 A 上;
3.3.2, 将 B 上盘子 2 移动到 C 上;
3.3.3, 将 A 上的盘子 1 移动到 C 上. 完成!
4, 可以总结出当 n 个盘子 (n2) 时, 移动的过程如下:
4.1, 将 A 上的 n-1 个盘子移动到 B 上;
4.2, 将 A 上的第 n 个移动到 C 上;
4.2, 将 B 上的 n-1 个盘子移动到 C 上; 其中 4.1 和 4.3 是类同的.
小编推荐一个学 C 语言 / C++ 的学习裙[ 六九九, 四七零, 五九六 ] , 无论你是大牛还是小白, 是想转行还是想入行都可以来了解一起进步一起学习! 裙内有开发工具, 很多干货和技术资料分享!
- // 代码
- #include
- long count = 0;// 记录移动的次数
- //n 个盘子, a 移动到 c, 用 b 做临时塔
- void hanoi(int n,char a,char b,char c)
- {
- if (1 == n)
- {
- printf("第 %d 次,%c 塔 --->%c 塔",++count,a,c);
- }
- else
- {
- hanoi(n-1,a,c,b);// 递归调用, a 移到 b,c 做临时塔
- printf("第 %d 次,%c 塔 --->%c 塔",++count,a,c);
- hanoi(n-1,b,a,c);
- }
- }
- int main(void)
- {
- int h;
- printf("输入汉诺塔圆盘的数量:");
- scanf("%d",&h);
- hanoi(h,'A','B','C');
- // getch();
- return 0;
- }
这些是 C/C++ 能做的
服务器开发工程师, 人工智能, 云计算工程师, 信息安全(黑客反黑客), 大数据 , 数据平台, 嵌入式工程师, 流媒体服务器, 数据控解, 图像处理, 音频视频开发工程师, 游戏服务器, 分布式系统, 游戏辅助等
来源: http://www.jianshu.com/p/e43bb0581afc