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