1 | 题目
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。编写程序判断你是否能够到达最后一个位置。
示例1:
输入:[2, 3, 1, 1, 4];
输出:TRUE(可以到达最后一个位置);
解释: 我们可以先跳1步,从位置0到达位置1,然后再从位置1跳3步到达最后一个位置。
示例2:
输入: [3, 2, 1, 0, 4];
输出:FALSE(不可以到达最后一个位置);
解释: 无论怎样,你总会到达索引为3的位置,但该位置的最大跳跃长度是0,所以你永远不可能到达最后一个位置。
2 | 设计分析
本题目不能一开始就从最大长度进行跳跃,应该一次次遍历每个数组元素,采用贪心法,#statMaxStep表示每次能够到达的最远距离,比较#statMaxStep和#tempI #nums[#tempI],求出上一步的最优解,当#statMaxStep小于#tempI的时候证明已经不可能到达终点了,直接返回false,当循环变量#tempI走到末尾时则证明可以达到最后的位置。
3 | 创建功能或功能块
创建功能块FB,命名为“JumpGame”。
4 | 定义接口变量
具体接口变量定义见下图:
定义了可变长(泛型或可变限值)长整数类型一维数组,数据类型为#Array[*] of DInt,作为跳跃数据。定义布尔型变量#resultQ作为判断结果输出,TRUE表示可以跳跃,FALSE表示不可以跳跃。
5 | 程序代码
编写程序代码。如下图:
当最大步#statMaxStep小于#tempI时,不能跳跃到最后位置,直接返回程序。当FOR循环变量能够到达最后时,说明可以跳跃到最后位置。
6 | 代码测试
在循环OB中调用FB-“JumpGame”。如下图:
定义了全局数据块(数组DB)GdbJumpGameData作为实参传递给形参,注意数组DB的实参表达方式。
转至在线并监控程序。如下图:
上图为跳跃数组数据:3、2、1、0、4。
上图为结果输出,#resultQ输出为FALSE,不可以跳跃到最后。
上图为跳跃数组数据:2、3、1、1、4。
上图为结果输出,#resultQ输出为TRUE,可以跳跃到最后。
7 | 总结
学习可变长一维数组的定义和使用;
学习使用FOR循环语句;
学习使用IF条件语句;
学习RETURN在程序中的作用;
学习在OB中调用FB和实参的传递方式。
- END
冗余PLC类型
S7-1500冗余系列CPU目前一共有四种,基本参数及订货号如下:
1. TIA 博途与SIMATIC S7-1500可编程控制器
百页彩页介绍,清晰产品定位
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved