给定一个非负整数数组,假定你的初始位置为数组第一个下标。
数组中的每个元素代表你在那个位置能够跳跃的最大长度。
请确认你是否能够跳跃到数组的最后一个下标。
例如:A=[2,3,1,1,4] 能够跳跃到最后一个下标,输出true
;
A=[3,2,1,0,4] 不能跳跃到最后一个下标,输出false
。
输入格式
第一行输入一个正整数 n(1≤n≤500),接下来的一行 n 个整数,输入数组 Ai。
输出格式
如果能跳到最后一个下标,输出true
,否则输出false
。
样例输入
5 2 0 2 0 1
样例输出
true
#include<stdio.h>
#include<stdbool.h>
int main()
{
bool canJump(int A[],int n);
int n,i,j,a[500];
scanf("%d",&n);
for(i=0;i<=n-1;i++)
scanf(" %d",&a[i]);
if(canJump(a,n)==1)
printf("true\n");
else printf("false\n");
return 0;
}
bool canJump(int A[],int n) {
if(n==1)
return 1;
if(A[0]==0)
return 0;
int i,max=0;
int idx=0;
for(i=1;i<=A[0];i++){
if(i==n)
return 1;
if(max<i+A[i]){
max=i+A[i];
idx=i;
}
}
return canJump(&A[idx],n-idx);
}