1. 程式人生 > >計蒜客:跳躍遊戲

計蒜客:跳躍遊戲

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;
}