找终点

找终点

题⽬描述:

给定⼀个正整数数组,设为 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;
}
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值