1. 程式人生 > >21天刷題計劃之9.1—童年生活三兩事(Java語言描述)

21天刷題計劃之9.1—童年生活三兩事(Java語言描述)

題目描述:

NowCoder小時候走路喜歡蹦蹦跳跳,他最喜歡在樓梯上跳來跳去。
但年幼的他一次只能走上一階或者一下子蹦上兩階。
現在一共有N階臺階,請你計算一下NowCoder從第0階到第N階共有幾種走法。

輸入描述:

輸入包括多組資料。每組資料包括一個整數n, (1≤n≤90)。

輸出描述:

對應每個輸入包括一個輸出。
為redraiment到達第n階不同走法的數量。

示例1

輸入
1
2

輸出
1
2

分析:題意分析,上臺階只有兩種方式,要麼一次一層,要麼一次兩層,所以本題很好理解。當爬一層的時候,只有一種方式;當爬兩層的時候要麼1+1的方式,要麼直接蹦躂上去;當需要爬到三層以上情況就不一樣了,因為最多隻能跳兩層臺階,所以最遠只能從1層直接蹦躂2層上去,或者從二層走一格上去(其中從一層到二層再到三層的情況已經包含在二層直接上去的方法中了),所以去三層的方法數就是到一層的方法數加上到二層的方法數。以此類推,對於n>=3時,t(n) = t(n-1)+t(n-2)。

程式碼實現如下:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) throws Exception {
		
		Scanner scan = new Scanner(System.in);
		while(scan.hasNext()){
			int step = scan.nextInt();
			System.out.println(goUpstairsWays(step));
		}
	}

	public static long goUpstairsWays(int step) throws Exception {
		
		if(step<1||step>90){
			throw new Exception("輸入有誤!");
		}else if(step==1){
			return 1;
		}else if(step==2){
			return 2;
		}else{
			long[] roads = new long[step+1];
			roads[1] = 1;
			roads[2] = 2;
			for(int i = 3;i<=step;i++){
				roads[i] = roads[i-1]+roads[i-2];
			}
			return roads[step];
		}
	}
}