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;


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