养兔子

养兔子

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

一对成熟的兔子每天能且只能产下一对小兔子,每次都生一公一母,每只小兔子的成熟期是1天,小兔子出生后隔一天才能再生小兔子。第一天某人领养了一对成熟的兔子,一公一母,请问第N天以后,他将会得到多少对兔子。

Input

测试数据包括多组,每组一行,为整数n(1≤n≤90)。
输入以0结束。

Output

对应输出第n天有几对兔子(假设没有兔子死亡现象,而且是一夫一妻制)。

Sample Input

1
2
0

Sample Output

1
2

法一:

//递推
#include


long long int b(int n)   //这里也需要long long类型
{
    long long int f[1000];  //利用数组
    int i;


    for(i = 1; i <= n; i++)
    {
        if(i == 1)
        {                              // 递归的方法
            f[i] = 1;    //一开始没生
        }


        if(i == 2)
        {
            f[i] = 2;
        }


        else if (i > 2)
        {
             f[i] = f[i - 1] + f[i - 2];   //第n天的兔子数量等于前一天的兔子的数量加上今天刚出生的小兔子的数量,今天新生小兔子数量等于今天所有成年兔子的数量,正好n-2天的所有兔子在今天都是成年,
        }


    }


    return f[n];
}


int main(void)
{
    int n;
    long long int m;


    while(scanf("%d", &n) && n != 0)
    {
        m = b(n);


        printf("%lld\n", m);
    }


    return 0;
}


法二:


#include


int main(void)
{
    long long int f[100];
    int i, n;


    while(scanf("%d", &n) && n != 0)
    {


        for(i = 1; i <= n; i++)
        {
            if(i == 1)
            {
                f[1] = 1;
            }


            else if(i == 2)
            {
                f[2] = 2;
            }


            else
            {
                f[i] = f[i - 1] + f[i - 2]; //这里不能用f[n] = f[n - 1] + f[n - 2]; 因为可能会是加了随机数
            }
        }


        printf("%lld\n", f[n]);
    }




}


你可能感兴趣的:(养兔子)