本文主要是介绍《猩球觉醒》中的高智商猩猩也会的汉诺塔问题,快来看看!!!(C语言,适合入门小白),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
汉诺塔问题

目标:借助B,将A的n个盘子移动到C
要求:
每次只能移动一次
必须上小下大,小的盘子能放在大的盘子上面,反之则不行
步骤最少
图解:(从小到大编为1,2,3,4……)

列举寻规律
当n=1时,需要1步;
当n=2时,需要3步;
当n=3时,需要7步;
当n=4时,需要15步;
如果你对数字敏感的话你很快发现规律:2^n-1;
如果你自己上手实操你会发现:第n个在C时必定有前n-1个在B上进行堆叠
而且我们知道:
三个柱子没有差异
从B往C堆叠的步骤等于从A往C堆叠的步骤;
所以可以得到一个等式:F(n)=2*F(n-1)+1;(F(n)是函数,表示移动n个盘子需要的步数;
+1是因为你要先移动第n个到C)
由此我们有两个方法:递归,数学公式法:等比数列
递归
对递归不熟悉的可以看看我的另一篇文章《青蛙跳台阶问题——三种方法教会你(适合入门小白)》
代码如图:

数学公式法:等比数列
F(n)=2*F(n-1)+1
两边同时+1
创建等比数列:F(n)+1=2(F(n-1)+1);
得到:F(n)=2^n-1
代码如图:
//数学公式法
#include<math.h>
int main()
{
int count = 0;//计算步骤
int n = 0;//n个盘子
scanf("%d", &n);
count = pow(2, n) - 1;
printf("count=%d\n", count);
return 0;
}
这篇关于《猩球觉醒》中的高智商猩猩也会的汉诺塔问题,快来看看!!!(C语言,适合入门小白)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!