華為OD機試 :找終點


題目大意

給定一個正整數數組,最大為100個成員,從第一個成員開始,走到數組最后一個成員最少的步驟數。第一步必須從第一元素開始,1<=步長<len/2, 第二步開始以所在成員的數字走相應的步數,如果目標不可達返回-1,只輸出最少的步驟數。

樣例輸入

7 5 9 4 2 6 8 3 5 4 3 9

樣例輸出

2

說明

第一步:第一個可選步長選擇2,第一個成員7走第2個成員,第二步,第2個成員為9,經過9個成員到最后

代碼實現

#include <iostream>
#include <array>

constexpr int LENGTH = 100;

int FindFinish(std::array<int, LENGTH> arr, int n)
{
    int min = 100;
    
    for (int i = 1; i < n / 2; ++i) {
        int path = 0;
        
        for (int j = i; j < n; j += arr[j]) {
            ++path;
            
            if (j == n - 1) {
                min = min < path ? min : path;
                break;
            }
        }
    }
    
    if (min == 100) {
        return -1;
    }
    
    return min;
}

int main(void)
{
    std::array<int, LENGTH> arr {};
    int index = 0;
    
    while (std::cin.peek() != '\n') {
        std::cin >> arr[index++];
    }
    
    std::cout << FindFinish(arr, index) << std::endl;
    
    return 0;
}

個人博客:

www.codeapes.cn


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM