给定一个非负整数数组,假定你的初始位置为数组第一个下标。
数组中的每个元素代表你在那个位置能够跳跃的最大长度。
你的目标是到达最后一个下标,并且使用最少的跳跃次数。
例如:
A = [2,3,1,1,4]A=[2,3,1,1,4],到达最后一个下标的最少跳跃次数为 2。(先跳跃 1 步,从下标 0 到 1,然后跳跃 3 步,到达最后一个下标。一共两次)
输入格式
第一行输入一个正整数n(1≤n≤100) ,接下来的一行,输入 n个整数,表示数组 A。
输出格式
最后输出最少的跳跃次数。
样例输入
5
3 1 1 1 1
样例输出
2
题目难度:二星
#include <iostream>
using namespace std;
int main()
{
//获取数据及初始化数组
int n;
cin >> n;
int a[n]; //a数组:存储输入数据
for(int i=0; i<n; i++)
cin >> a[i];
int b[n]; //b数组:存储所需最少步数
for(int i=0; i<n; i++)
b[i] = i; //b初始化为跳到每个位置所需要的最大步数
for(int i=0; i<n; i++){
//j的范围为i所表示的位置所能跳到的范围
for(int j=i+1; j<=i+a[i] && j<n; j++){
//从当前位置跳到下一个位置也需要一步,所以b[j]与b[i]+1比较
b[j] = b[j]<b[i]+1?b[j]:b[i]+1;
}
}
cout << b[n-1];
return 0;
}