1. 程式人生 > >袋鼠過河

袋鼠過河

輸出 個數 ring mat ont 能夠 NPU 多少 ade

題目描述

一只袋鼠要從河這邊跳到河對岸,河很寬,但是河中間打了很多樁子,每隔一米就有一個,每個樁子上都有一個彈簧,袋鼠跳到彈簧上就可以跳的更遠。每個彈簧力量不同,用一個數字代表它的力量,如果彈簧力量為5,就代表袋鼠下一跳最多能夠跳5米,如果為0,就會陷進去無法繼續跳躍。河流一共N米寬,袋鼠初始位置就在第一個彈簧上面,要跳到最後一個彈簧之後就算過河了,給定每個彈簧的力量,求袋鼠最少需要多少跳能夠到達對岸。如果無法到達輸出-1

輸入描述:

輸入分兩行,第一行是數組長度N (1 ≤ N ≤ 10000),第二行是每一項的值,用空格分隔。

輸出描述:

輸出最少的跳數,無法到達輸出-1
示例1

輸入

5
2 0 1 1 1

輸出

4
 1 import java.io.BufferedReader;
 2 import java.io.InputStreamReader;
 3    
 4 public class Main {
 5    
 6     public static void main(String[] args) throws Exception{
 7         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 8         String str;
 9         String[] strs;
10 int n; 11 12 while((str = br.readLine()) != null){ 13 n = Integer.parseInt(str.trim()); 14 str = br.readLine(); 15 strs = str.trim().split(" "); 16 int[] input = new int[n]; 17 for(int i = 0; i < n; ++i) 18 input[i] = Integer.parseInt(strs[i]);
19 int step = 1; 20 int now = input[0]; 21 int next = now; 22 for(int i = 1; i < n; ++i){ 23 if(i == now){ 24 next = Math.max(next, i + input[i]); 25 if(next == now){ 26 System.out.println(-1); 27 break; 28 } 29 ++step; 30 now = next; 31 if(next >= n){ 32 System.out.println(step); 33 break; 34 } 35 } 36 else{ 37 next = Math.max(next, i + input[i]); 38 if(next >= n){ 39 System.out.println(++step); 40 break; 41 } 42 } 43 } 44 } 45 } 46 }

袋鼠過河