给定一个非负整数数组,假定你的初始位置为数组第一个下标。
数组中的每个元素代表你在那个位置能够跳跃的最大长度。
请确认你是否能够跳跃到数组的最后一个下标。
例如:
A = [2,3,1,1,4],
return true.
A = [3,2,1,0,4],
return false.
格式:
第一行输入一个正整数n,接下来的一行,输入数组A[n]。如果能跳到最后一个下标,输出“true”,否则输出“false”
样例输入
5
2 0 2 0 1
样例输出
true
题解:
主要思想就是从第一个数组元素开始计算此数组元素所能到达的最远的数据元素下标,如果后面有更远的则替换max值,但如果出现下标值比能达到的最远元素max的值还大的数组元素,说明此元素不可达到,那么最后一个元素更不可达到,就返回“false”,否则返回“true”。代码如下
#include<stdio.h> int main() { int arr[1000]; int n; int max, ptr; scanf("%d", &n); for(int i = 0;i < n;i++) scanf("%d", &arr[i]); max = arr[0];//从第一个数定义最大长度 for(ptr = 0;ptr <= max;ptr++) if(arr[ptr]+ptr > max) max = arr[ptr]+ptr;//更换最长长度 if(ptr > n-1) printf("true"); else printf("false"); return 0; }