自学内容网 自学内容网

[华为OD]最小步数找终点,逻辑简单,送分题

#include<bits/stdc++.h>
using namespace std;
int main()
{
    vector<int> nums;
    int num;
    while(cin>>num)
    {
        nums.emplace_back(num);
    }
    int minStep=INT_MAX;
    //i表示第一步的步长
    for(int i=0;i<nums.size()/2;i++)
    {
        int j=i+nums[i];//i表示第一步的步长,nums[i],表示第二步步长
        int step=2;//此时已经跳了两步
        //没有跳到最后一步就继续跳
        while(j<nums.size()-1)
        {
            j+=nums[j];
            step++;
        }
        if(j==nums.size()-1)//若刚好可以跳到最后一个位置,则保留到终点的最小步数
        {minStep=min(minStep,step);}
    }
    cout<<(minStep==INT_MAX?-1:minStep)<<endl;
}
 


原文地址:https://blog.csdn.net/m0_57195330/article/details/145267094

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!