佛山哪个做网站的好,wordpress出现的问题,网站文章内容优化方案,小程序开发平台官网入口一、问题大意
大梵天创造世界的时候做了三根金刚石柱子#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定#xff0c;任何时候#xff0c;在小圆盘上都不能放大圆盘#xff0c;…一、问题大意
大梵天创造世界的时候做了三根金刚石柱子在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定任何时候在小圆盘上都不能放大圆盘且在三根柱子之间一次只能移动一个圆盘。问应该如何操作百度百科现要求写出一个代码表明移动圆盘的过程。 二、大致思路 递归的问题不用想的很复杂这道题目在思考起来应该从最后的结果入手除最小的圆盘外其他的圆盘已经在第三根柱子上了而且按照从小到大的顺序排列着现在只需要将最后一个并且是最小的圆盘移到第三根柱子上就大功告成了。
我的代码是用A、B、C三个字母代表三根柱子A-B表示从把A的圆盘移到B上。既然是递归那么就得思考一下递归到何时递归终止。要说终止上文已经说了最小的那一个圆盘落在第三根柱子上就终止了。也就是n等于1时终止那么具体的移动过程是一个什么样的思路呢
假设
我们已经拥有了解决这个问题的函数hannuotaint nchar Achar Bchar C
a、那么依照上述绿色的文字我们需要把n-1个圆盘通过C移动到B后最大的那一个圆盘才能移动到C上所以就有
hannuota(n-1,A,C,B);
b、然后显示A-C上printf(%c-%c\n,A,C);这里看似是A-C,其实是由传递到A、C对应位置的参数确定的所以也就可以输出移动过程。我觉得这是本题最巧妙的存在
b、最大的圆盘移动到C上之后B上的剩余的圆盘需要借助A移动到C上。所以就有hannuotan-1,B,A,C 这样就解决问题啊
三、具体实现
#includestdio.h
#includestdlib.h
int hannuota(int n, char A, char B, char C)//用大写的ABC代替汉诺塔的三根柱子
{if (n 1)printf(%c-%c\n, A, C); //当n1时直接把盘子从A移动到C//也是递归终止的条件else{hannuota(n - 1, A, C, B); //把A的n-1个盘子通过C移动到Bprintf(%c-%c\n, A, C); //显示从A移动到C的所有的圆盘的过程因为传参的不同//所以可以显示过程hannuota(n - 1, B, A, C); //把B上面的n-1个盘通过A移动到C}return 0;
}int main()
{printf(请输入汉诺塔的层数\n);int n;scanf(%d, n);printf(汉诺塔移动过程\n);hannuota(n, A, B, C);system(pause);return 0;
}
四、实验结果