10.2.矩形覆蓋+跳臺階

一:矩形覆蓋

一:題目描述:

我們可以用 2*1 的小矩形橫着或者豎着去覆蓋更大的矩形。請問用 n 個 2*1 的小矩形無重疊地覆蓋一個 2*n 的大矩形,總共有多少種方法?

二:解題思路:

通過題目我們可以發現當n變化是會有以下規律:
n的值 大矩形的數量
n = 1 1
n = 2 2
n = 3 3
n = 4 5
.
.
.
f(n) f(n-1)+f(n-2);

所以通過以上規律可得當n>2之後,f(n) = f(n-1) + f(n-2);
在這裏插入圖片描述
因此可以看出這是斐波那契數列的一種變形

三:代碼

/*
    我們可以用 2*1 的小矩形橫着或者豎着去覆蓋更大的矩形。
    請問用 n 個 2*1 的小矩形無重疊地覆蓋一個 2*n 的大矩形,總共有多少種方法?
 */

/*
    思路分析:
        n = 1;  1種
        n = 2;  2
        n = 3;  3
        n = 4;  5

        f(n) = f(n-1)+f(n-2);(n>2)
 */
public class Demo10_2 {

    public static void main(String[] args) {
        int n = 4;
        int fib = fib(n);
        System.out.println(fib);

    }

    public static int fib(int n){
        int fib1 = 1;
        int fib2 = 2;
        int fib = 0;

        for (int i = 2;i<n;i++){
            fib = fib1 +fib2;
            fib1 = fib2;
            fib2 = fib;
        }

        return fib;
    }

}

二:跳臺階

一:題目描述

一隻青蛙一次可以跳上 1 級臺階,也可以跳上 2 級。求該青蛙跳上一個 n 級的臺階總共有多少種跳法。

二:題目分析

當n = 1時:只有一種
n = 2 2種
n = 3 3種
n = 4 5種
f(n) = f(n-1)+f(n-2);
青蛙跳臺階
因此這也是斐波那契數列的一種變形,代碼與上同!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章