毕设网站开发什么题目好,wordpress子网页,网站跳出率因素,网站开发后期维护更新一、介绍 汉诺塔#xff08;Tower of Hanoi#xff09;#xff0c;又称河内塔#xff0c;是一个源于印度古老传说的益智玩具。大焚天创造世界的时候做了三根金刚石柱子#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。 大焚天命令婆罗门把圆盘从下面开始按…
一、介绍 汉诺塔Tower of Hanoi又称河内塔是一个源于印度古老传说的益智玩具。大焚天创造世界的时候做了三根金刚石柱子在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。 大焚天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定在小圆盘上不能放大圆盘在三根柱子之间一次只能移动一个圆盘。 面试题 08.06. 汉诺塔问题 - 力扣LeetCode 二、问题描述 有 ABC 三根柱子A 上面有 n 个盘子我们想把 A 上面的盘子移动到 C 上但是必须要满足以下三个条件 每次只能移动一个盘子;盘子只能从柱子顶端滑出移到下一根柱子;盘子只能叠在比它大的盘子上。 三、解题思路 这是一道递归方法的经典题目。 1、如果 n 1只有一个盘子那么就直接将它从 A 移到 C 上
2、如果 n 2这时我们就需要借助 B因为小盘子必须时刻都在大盘子上面共需要 4 步 3、如果 n 2思路和上面是一样的。我们将 n 个盘子看成两个部分一部分有 1 个盘子另一部分有 n-1 个盘子 可是那 n-1 个盘子是如何从 A 移动到 B 再移动到 C 的呢 将最初的 n 个盘子从 A 移到 C 的问题转化成了将 n-1 个盘子从 A 移到 C 的问题 以此类推直至转化成 1 个盘子的问题时这个问题也就解决了。这里利用了分治的思想。 当 n 1 时直接将盘子从 A 移到 C 上当 n 1 时
先把上面的 n-1 个盘子从 A 借助 C 移动到 B化为子问题进行递归再将 A 上最后一个盘子从 A →C再将 B 上 n - 1 个盘子从 B 借助 A 移动到 C化为子问题进行递归。 四、代码
#includestdio.hvoid move(char A, char C, int n)
{printf(把第%d个圆盘从%c——%c\n, n, A, C);
}void HanoiTower(char A, char B, char C, int n)
{if (n 1){move(A, C, n);}else{// 1.把A上n-1个圆盘从A柱借助C移动到B上HanoiTower(A, C, B, n - 1);// 2.将A最后一个圆盘从A-Cmove(A, C, n);// 3.把B上n-1个圆盘从B借助A移动到C上HanoiTower(B, A, C, n - 1);}
}int main()
{int n 0;printf(输入A柱上的圆盘的个数);scanf(%d\n, n);//将n个圆盘从A柱借助B柱移动到C柱上HanoiTower(A, B, C, n);return 0;
}五、扩展 如果想要计算移动了多少次盘子只需要加入多一个 move() 函数即可。