[西门子] SCL编程实例100例-121-鸡蛋掉落问题

[复制链接]
查看132 | 回复0 | 2024-4-25 16:57:16 | 显示全部楼层 |阅读模式
1 | 题目



有K个鸡蛋喝一栋N层高的楼,存在一个临界楼层F,当鸡蛋从F层或更低的楼层掉落的话,鸡蛋都不会碎裂;反之,当鸡蛋从高于F层的楼层掉落时,鸡蛋就会碎裂,求最小需要几次试验才能够找出临界层F。



2 | 设计分析



显然,如果只有一个鸡蛋,那么有几层楼就必须做几次试验才能够确保找出临界层F;而如果只有一层楼,那么无论手上有多少鸡蛋,所需要进行的试验次数都是一次;其它情况则考察每一次操作从第i层掉落的情况,如果没有碎,那么只需要考察楼上的第n-i层即可;反之,如果碎了,那么只要考察在k-1个鸡蛋的情况下对i-1个楼层需要多少次试验才能够确保获得临界层。
得到如下递推公式:
drops[k][n]=drops[k][n-1]+drops[k-1][n-1]+1
k表示有k个蛋,n表示最多经过n次操作,drops[k][n]表示当有k个蛋时,经过最少n次操作可以确保找出多少楼以下的临界楼层。



3 | 创建功能或功能块



创建功能块FB,命名为“EggDrop”。




4 | 定义接口变量



具体接口变量定义见下图:


定义整型数变量result:输出计算结果;
定义整型数二维数组变量statDrops:存储尝试的过程值;
定义整型数常量E_N:鸡蛋数;
定义整型数常量F_N:楼层数。



5 | 程序代码



编写程序代码。如下图:


以上算法并非最优算法,感兴趣的炮友儿可以进一步优化。



6 | 代码测试



在循环OB中调用FB-“EggDrop”,调用时会自动创建背景数据块,命名为“InstEggDrop”,该背景数据块可以用来监视和修改数据。转至在线并监控程序。如下图:
给定3个鸡蛋14层楼的情况下,最少需要4次试验。



7 | 总结



学习IF语句的使用;
学习FOR循环语句的使用;
学习FOR循环语句嵌套的使用;

学习局部常量的定义和使用方法。

- END -
工控老炮儿


分享 | 咨询 | 合作 | 共赢




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则