计蒜客刷题之旅 之 跳跃游戏
2018-02-13 22:16
302 查看
给定一个非负整数数组,假定你的初始位置为数组第一个下标。
数组中的每个元素代表你在那个位置能够跳跃的最大长度。
请确认你是否能够跳跃到数组的最后一个下标。
例如: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
数组中的每个元素代表你在那个位置能够跳跃的最大长度。
请确认你是否能够跳跃到数组的最后一个下标。
例如: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 ; 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; }