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循环语句嵌套的使用;
学习局部常量的定义和使用方法。