030變態跳臺階(keep it up)

劍指offer中題目:http://ac.jobdu.com/problem.php?pid=1389

題目描述:

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

輸入:

輸入可能包含多個測試樣例,對於每個測試案例,

輸入包括一個整數n(1<=n<=50)。

輸出:

對應每個測試案例,

輸出該青蛙跳上一個n級的臺階總共有多少種跳法。

樣例輸入:
6
樣例輸出:
32
這個我們可以推到一個

f(0) = 0;

f(1) = 1;

f(2) = 1 + f(1) = 2;//1可以直接跳到2

f(3) = 1 + f(1) + f(2);//f(1)跳2步可以到3,f(2)跳1步

f(4) = 1 + f(1) + f(2) + f(3);//f(1)跳2步可以到4,f(2)跳2步到4,f(3)跳1步

f(5) = 1 + f(1) + f(2) + f(3) + f(4);

。。。。。。。。。

代碼:

#include <stdio.h>
#include <memory.h>
#include <stdlib.h>
 
typedef unsigned long long LLD;
 
LLD Array[51];
 
void fibonacci()
{
    LLD i;
    LLD k;
 
    memset(Array, 0, sizeof(Array));
 
    Array[0] = 0;
    Array[1] = 1;
 
    for (i = 2; i < 51; ++i)
    {
        Array[i] = 1;
        for (k = 0; k < i; ++k)
        {
            Array[i] += Array[k];
        }
    }
}
 
int main()
{
    LLD N;
 
    fibonacci();
 
    while (scanf("%lld", &N) != EOF)
    {
        printf("%lld\n", Array[N]);
    }
 
    return 0;
}
/**************************************************************
    Problem: 1389
    User:
    Language: C++
    Result: Accepted
    Time:0 ms
    Memory:1020 kb
****************************************************************/


題目描述:

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

輸入:

輸入可能包含多個測試樣例,對於每個測試案例,

輸入包括一個整數n(1<=n<=70),其中n爲偶數。

輸出:

對應每個測試案例,

輸出用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有的方法數。

樣例輸入:
4
樣例輸出:
5
思路:

對於2*n的如果橫着放:放2塊之後變成2*(n-2);
         如果豎着放:放1塊之後變成2*(n-1);
因此對於n的總數f(n)=f(n-1) + f(n-2);f(1)=1,f(0)=1;


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