作者 | 主题 |
---|---|
1Shadow1 侠士 经验值:1130 发帖数:81 精华帖:4 |
楼主 2023-05-27 20:03:18
主题:汉诺塔(Hanoi)的实现(一)-SCL 上 C 语言课的时候,都实现过汉诺塔的例子,就在想是不是用PLC也可以实现,因为不确定PLC能否实现递归,所以有了前面的帖子;既然能实现22层,那对汉诺塔来说已经够多了。此处只定义了10层,这样的话应该需要2的10方减1,也就是1023个数组条目,用来存储步骤过程;写这个的目的主要是锻炼逻辑思维,可以把递归当成是有限的多项式展开; 0.题目: 有10个大小不一的托盘位于左侧柱子A, 限制要借助中间柱子B, 把A 边的10个托盘,移动到柱子C. 1.解题思路 观察移动托盘的过程,总结规律。 10个托盘步骤太多,可以先假设1,2,3,4 1个托盘:A->C(1), 2个托盘:A->B(1),A->C(2),B->(1) 3个托盘:把前面2个托盘当成一个整体A->B,使得最大托盘露出来后,A->C(3),把中间2 个托盘移动到C. 4个托盘:、、、、、、、、、 总结规律:一共分三个步骤,二种情况; 第一种情况:托盘不止一个 分三步:有n个托盘,先把n-1 个挪到中间位置,把露出来的第n个挪到目标位置,再把中间位置(n-1)个挪到目标位置; 之后再把n-1当作n,继续完成这种情况,直到n为1 了,调用第二种; 第二种情况:托盘只剩下一个 就一步:把托盘挪到目标位置; 2.程序 2.1 先定义变量 2.2 TIA 程序 2.3 运行结果(括号里是第几个托盘) 2个托盘的时候; 3个托盘的时候 5个托盘的时候
谋定而后动,精益求精。
|