计蒜客题目 跳跃游戏
2018-02-11 16:55
253 查看
给定一个非负整数数组,假定你的初始位置为数组第一个下标。
数组中的每个元素代表你在那个位置能够跳跃的最大长度。
请确认你是否能够跳跃到数组的最后一个下标。
例如:A = [2,3,1,1,4]A=[2,3,1,1,4] 能够跳跃到最后一个下标,输出
A = [3,2,1,0,4]A=[3,2,1,0,4] 不能跳跃到最后一个下标,输出
笔记:short是半个word长,int是一个word长,long是一个或者二个word长。
数组中的每个元素代表你在那个位置能够跳跃的最大长度。
请确认你是否能够跳跃到数组的最后一个下标。
例如: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(1≤n≤500),接下来的一行 nn 个整数,输入数组 A_iAi。输出格式
如果能跳到最后一个下标,输出true,否则输出
false。
样例输入
5 2 0 2 0 1
样例输出
true
#include<iostream> using namespace std; int main() { unsigned long n,k=0; cin>>n; unsigned long a ; for(int i=0;i<n;i++){ cin>>a[i]; } while((k<n)&&(a[k]!=0)){ k=k+a[k]; } if(k>=(n-1)) cout<<"true"; else cout<<"false"; return 0; }思路:在没到达最后一个点之前,能跳多远跳多远。受问答区启发,最后的判断条件只需能否超过数组总长即可,不必恰好等于总长。这么一看给出的用例也很贼,都是恰好跳到最后一个的,导致我最后一组测试总是不过……
笔记:short是半个word长,int是一个word长,long是一个或者二个word长。