劍指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;