600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > [C语言]C语言解决汉罗塔问题(初学者版)

[C语言]C语言解决汉罗塔问题(初学者版)

时间:2021-07-05 14:27:31

相关推荐

[C语言]C语言解决汉罗塔问题(初学者版)

目录

1、汉罗塔问题解决思路:

2、代码实现:

函数部分:

全部代码:

运行结果:

3、结语:

1、汉罗塔问题解决思路:

以三个为例,步骤为:

1.首先我们需要将其分成两个整体;

2. 然后记AC(1)=1,(1)表示最上面第一个的圆盘,AC表示从A移动至C,AC(1)表示将最第一大的一个圆盘从A移动至C;

3.具体操作:

a.我们需要计算的是AC(3)的步数;

b. AC(3)=AB(2)+AC(1)+BC(2);

c.AB(2)=AC(1)+AB(1)+CB(1);

d.BC(2)=BA(1)+BC(1)+AC(1);

f.AC(3)=AC(1)+AB(1)+CB(1)+AC(1)+BA(1)+BC(1)+AC(1)=7;

所以将最上面三个从A移动至C最少总共需要7步;

假如有n个圆盘:

AC(n)=AB(n-1)+AC(1)+BC(n-1);

2、代码实现:

函数部分:

int AB(int n)//n为最上面的圆盘数,AB表示从A移动到B;{if (n == 1){return 1;//最上面的一个圆盘从A移动到B需要1步;}return AC(n - 1) + AB(1) + CB(n - 1);//AB(n)=AC(n - 1) + AB(1) + CB(n - 1)}int AC(int n)//类似与上解释{if (n == 1){return 1;//}return AB(n - 1) + AC(1) + BC(n - 1);}int BA(int n)//类似与上解释{if (n == 1){return 1;}return BC(n - 1) + BA(1) + CA(n - 1);//类似与上解释}int BC(int n)//类似与上解释{if (n == 1){return 1;}return BA(n - 1) + BC(1) + AC(n - 1);}int CB(int n)//类似与上解释{if (n == 1){return 1;}return CA(n - 1) + CB(1) + AB(n - 1);}int CA(int n)//类似与上解释{if (n == 1){return 1;}return CB(n - 1) + CA(1) + BA(n - 1);}

全部代码:

#include<stdio.h>int AB(int n);int AC(int n);int BA(int n);int BC(int n);int CA(int n);int CB(int n);int main(){int n = 4;//有四个圆盘printf("%d", AC(n));//打印结果}int AB(int n){if (n == 1){return 1;}return AC(n - 1) + AB(1) + CB(n - 1);}int AC(int n){if (n == 1){return 1;}return AB(n - 1) + AC(1) + BC(n - 1);}int BA(int n){if (n == 1){return 1;}return BC(n - 1) + BA(1) + CA(n - 1);}int BC(int n){if (n == 1){return 1;}return BA(n - 1) + BC(1) + AC(n - 1);}int CB(int n){if (n == 1){return 1;}return CA(n - 1) + CB(1) + AB(n - 1);}int CA(int n){if (n == 1){return 1;}return CB(n - 1) + CA(1) + BA(n - 1);}

运行结果:

将四个圆盘A移动至C的最少步骤为15步;

3、结语:

这种算法最重要的是将繁化成简;整体思想很重要;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。