給定一個非負整數數組,假定你的初始位置爲數組第一個下標。
數組中的每個元素代表你在那個位置能夠跳躍的最大長度。
請確認你是否能夠跳躍到數組的最後一個下標。
例如: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
分析:需要注意的一點是:只要跳躍到值爲0的位置時,跳躍就會停止,如果此時不能到達最後的數組下標,那就不能跳躍到最後的數組下標位置了。
#include <iostream>
using namespace std;
/*
*/
int main()
{
int n,a[501],f;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
if(n==1)
cout<<"true"<<endl;
else if(a[0]==0)
cout<<"false"<<endl;
else
{
n--; //最後一個元素不需要檢驗
for(int i=1;i<n;i++)
{
if(a[i]==0) //檢驗a[1]~a[n-2]中所有等於0的元素
{
f=0;
for(int k=i-1;k>=0;k--) //對每個在等於0的a[i]進行檢驗,判斷是否能夠跳過
{
if(k+a[k]>i) //如果位置i前有能夠跳過a[i]的存在
{
f=1;
break;
}
}
if(f==0) //如果如果位置i前沒有能夠跳過a[i]的存在,不符合題意直接結束程序
{
cout<<"false"<<endl;
return 0;
}
}
}
cout<<"true"<<endl;
}
return 0;
}