找终点
题⽬描述:
给定⼀个正整数数组,设为 nums ,最⼤为100个成员,求从第⼀个成员开始,正好⾛到数组 最后⼀个成员,所使⽤的最少步骤数。 要求: 1、第⼀步必须从第⼀元素开始,且:
1、<=第⼀步的步⻓长 <= len/2 ;( len 为数组的⻓长度,需 要⾃⾏解析)。
2、从第⼆步开始,只能以所在成员的数字⾛相应的步数,不能多也不能少,如果⽬标不可达 返回-1,只输出最少的步骤数量。
3、只能向数组的尾部⾛,不能往回⾛。
输⼊描述:
由正整数组成的数组,以空格分隔,数组⻓长度⼩于100,请⾃⾏解析数据数量。
输出描述:
正整数,表示最少的步数,如果不存在输出-1。
输⼊:
7 5 9 4 2 6 8 3 5 4 3 9
输出:
2
code
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> v;
int k;
while(cin>>k){
v.push_back(k);
}
int len = v.size();//总路程len,走len-1步刚好到达终点
int res = 101;
bool find = false;
for(int i=1; i<=len/2; ++i){
int steps = 1;
int cur = i;//第一步
while(cur<len-1){
//printf("cur=%d\n",cur);
cur += v[cur];
++steps;
}
if(cur==len-1){
find = true;
res = min(steps,res);
}
}
if(find)
cout <<res;
else
cout <<"-1";
return 0;
}