跳一跳:有n个盒子排成了一行,每个盒子上面有一个数字a[i],表示在该盒子上的人最多能向右移动a[i]个盒子(比如当前所在盒子上的数字是3,则表示可以一次向右前进1个盒子,2个盒子或者3个盒子)。
从左边第一个盒子上开始体验游戏,请问最少需要移动几次能到最后一个盒子上?
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include<vector>
using namespace std;
/**
* Welcome to vivo !
*/
int solution(int a[], int N)
{
// TODO Write your code here
vector<int> T(N);
bool flag=false;
if(N==1)
{
return 0;
}
int count=0;
for(int i=0;i<N;i++)
{
T[i]=a[i]+i;
}
for(int i=0;i<N-1;i++)
{
if(T[i]>=N-1)
{
count++;
N=i+1;
i=-1;
}
if(N==1)//判断可实现条件!!!!!!
{
flag=true;
break;
}
}
return flag?count:-1;//存在跳失败的情况!!!!!!
}
int main()
{
string str("");
getline(cin, str);
int a[2000];
int i = 0;
char *p;
int count = 0;
const char* strs = str.c_str();
p = strtok((char *)strs, " ");
while(p)
{
a[i] = atoi(p);
count++;
p = strtok(NULL, " ");
i++;
if(i >= 2000)
break;
}
int num = solution(a, count);
cout << num << endl;
return 0;
}