計蒜客:跳躍遊戲
阿新 • • 發佈:2018-11-17
https://nanti.jisuanke.com/t/18
給定一個非負整數陣列,假定你的初始位置為陣列第一個下標。
陣列中的每個元素代表你在那個位置能夠跳躍的最大長度。
請確認你是否能夠跳躍到陣列的最後一個下標。
例如:A=[2,3,1,1,4]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]A=[3,2,1,0,4] 不能跳躍到最後一個下標,輸出false
。
輸入格式
第一行輸入一個正整數 n(1≤n≤500)n(1 \leq n \leq 500)n(1≤n≤500),接下來的一行 nnn 個整數,輸入陣列 AiA_iAi。
輸出格式
如果能跳到最後一個下標,輸出true
,否則輸出false
。
樣例輸入
5 2 0 2 0 1
樣例輸出
true
貪心問題,因為只要跳到最後一格即可,所以只要從最後一格開始。
從第一格跳到最後一格和從最後一格跳到第一格是相同的。
如果從一個格子可以跳到最早出現的可以直接跳到最後一格的後面,
那就可以先直接跳到這個格子,再到終點,
如果不能達到,這個格子已經是最近的了,肯定不能跳到最後。
找一個最早出現的可以直接跳到最後一格的,
把這一格變成最後一格,
重複是上面的過程,如果最後一格變為0,就為true,否則為false。
#include<stdio.h> #define N 1020 int a[N]; int main() { int n,i; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) scanf("%d",&a[i]); n--; for(i=0;i<n;i++) { if(a[i]>=n-i) { n=i; i=-1; } } if(n!=0) printf("false\n"); else printf("true\n"); } return 0; }