计蒜客 挑战难题 第20题:跳跃游戏二

来源:互联网 发布:pnp网络摄像机客户端 编辑:程序博客网 时间:2024/05/12 03:36

第20题:跳跃游戏二

 
 
 时间限制 1000 ms
 内存限制 10000 K

给定一个非负整数数组,假定你的初始位置为数组第一个下标。

数组中的每个元素代表你在那个位置能够跳跃的最大长度。

你的目标是到达最后一个下标,并且使用最少的跳跃次数。

例如:

A = [2,3,1,1,4], 到达最后一个下标的最少跳跃次数为2.(先跳跃1步,从下标0到1,然后跳跃3步,到达最后一个下标。一共两次)

格式:

第一行输入一个正整数n,接下来的一行,输入数组A[n]。

最后输出最少的跳跃次数。

样例输入

53 1 1 1 1

样例输出

2

仅供参考:

#include <stdio.h>int Jump(int n,int A[]);int Max(int i,int A[],int n);void main(){int A[1000];int n;scanf("%d",&n);    for(int i=0;i<n;i++)scanf("%d",&A[i]);printf("%d\n",Jump(n,A));}int Jump(int n,int A[]){    int i=0,sum=A[0],x=0;    int count=0;    if(1==n)        return 0;    count++;    while(sum<n-1){        count++;        if(Max(x,A,sum)>=n-1)            return count;        else if(Max(x,A,sum)<=sum)            break;x=Max(x,A,sum)-sum;sum+=x;    }    if(sum<n-1)        return 0;    else        return count;}int Max(int i,int A[],int n){int max=0;    while(i<=n){        if(max<=A[i]+i&&A[i]!=0)max=A[i]+i;i++;    }return max;}


0 0