给出一组正整数,你从第一个数向最后一个数方向跳跃,每次至少跳跃1格,每个数的数值表示你从这个位置可以跳跃的最大长度。计算如何以最少的跳跃次数调到最后一个数。
输入描述:
第一行表示有多少个数n
第二行开始依次是1到n个数,一个数一行
输出描述:
输出一行,表示最少跳跃的次数
#include<iostream>
using namespace std;
int JMP(int a[], int n)
{
int i=0,j=0;
int step=0;
while(j<n)
{
step++;
int m=j;
for(int k=i; k<=j; k++)
{
m=max(m,k+a[k]);
if(m>=n-1)
return step;
}
i=j+1;
j=m;
}
return step;
}
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0; i<n; i++)
cin>>a[i];
cout<<JMP(a, n)<<endl;
return 0;
}