给定一个非负整数数组,假定你的初始位置为数组第一个下标。
数组中的每个元素代表你在那个位置能够跳跃的最大长度。
请确认你是否能够跳跃到数组的最后一个下标。
例如: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≤n≤500),接下来的一行 n 个整数,输入数组 Ai
。
输出格式
如果能跳到最后一个下标,输出true,否则输出false。
样例输入
5
2 0 2 0 1
样例输出
true
#include <iostream>
using namespace std;
int main()
{
unsigned int n;
cin >> n;
//获取数据
unsigned int length[n];
for(unsigned int i=0; i<n; i++)
cin >> length[i];
//初始化最远可达下标为第一个下标处可达的最远距离
unsigned int farthest = length[0];
//遍历length,从前往后逐个根据当前位置可达距离更新所能到达的最远下标
for(unsigned int current=1; current<n; current++){
//在不能到达当前下标时提前退出遍历
if(farthest < current)
break;
//最远可达下标取大
farthest = farthest>current+length[current]?farthest:current+length[current];
}
//使用的容器为数组,最后一个下标为n-1,而不是n(第一次因此WA)
cout << (farthest>=n-1?"true":"false");
return 0;
}