计蒜客-跳跃游戏
发布日期:2022-02-25 01:17:45 浏览次数:63 分类:技术文章

本文共 889 字,大约阅读时间需要 2 分钟。

给定一个非负整数数组,假定你的初始位置为数组第一个下标。

数组中的每个元素代表你在那个位置能够跳跃的最大长度。

请确认你是否能够跳跃到数组的最后一个下标。

例如:A = [2,3,1,1,4]A=[2,3,1,1,4] 能够跳跃到最后一个下标,输出true

A = [3,2,1,0,4]A=[3,2,1,0,4] 不能跳跃到最后一个下标,输出false

输入格式

第一行输入一个正整数 n(1 \leq n \leq 500)n(1n500),接下来的一行 nn 个整数,输入数组 A_iAi

输出格式

如果能跳到最后一个下标,输出true,否则输出false

样例输入

52 0 2 0 1

样例输出

true

解题思路

这是一道贪心题(感觉不像=。=),题目说只是跳跃的最大长度,因此可能跳到的地方为0,但是前面可以是不为0的,所以到底过不过不能只是考虑跳到的地方是不是0,要考虑前面的情况,因此应该用另一个数组去做标记,判断是不是通

#include
using namespace std;int a[1005],b[1005];int main(){ int n; while(cin>>n){ memset(b,0,sizeof(b)); int i,j; for(i = 0;i < n;i++){     cin >> a[i]; } b[0] = 1; for(i = 0;i < n;i++){ int k = i; if(b[i]){ //如果没有断路就继续 for(j = i;j <= k + a[i];j++){ b[j] = 1; } } else{ //如果出现断路 就证明根本跳不到 cout<<"false"<

转载地址:https://blog.csdn.net/qq_37755550/article/details/80156034 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:计蒜客-加一(高精度问题)
下一篇:最大子阵列

发表评论

最新留言

不错!
[***.144.177.141]2024年04月01日 12时33分26秒