养兔子,母牛

一对成熟的兔子每天能且只能产下一对小兔子,每次都生一公一母,每只小兔子的成熟期是1天,小兔子出生后隔一天才能再生小兔子。第一天某人领养了一对成熟的兔子,一公一母,请问第N天以后,他将会得到多少对兔子。
测试数据包括多组,每组一行,为整数n(1≤n≤90)。
输入以0结束。
对应输出第n天有几对兔子(假设没有兔子死亡现象,而且是一夫一妻制)。
Sample Input

1
2
0
sample Output

1
2

Hint
数据类型可以用64位整数:long long

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int i,n;
    long long int f[101];
    while(scanf("%d",&n)!=EOF&&n)
    {
        f[1]=1;
        f[2]=2;
        for(i=3; i<=n; i++)
        {
            f[i]=f[i-1]+f[i-2];
        }
        printf("%lld\n",f[n]);
    }

    return 0;
}

有一对夫妇买了一头母牛,它从第2年起每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0< n< 55),n的含义如题目中描述。 n=0表示输入数据的结束,不做处理。
对于每个测试实例,输出在第n年的时候母牛的数量。 每个输出占一行。
Sample Input

2
4
5
0

Sample Output

2
4
6

数组f[i]:第 i 年母牛总数—第 n 年的母牛总数为f[n] 。
f[i] 与两个值有关 :
1) 本年之前已出生母牛数目–去年母牛总数–f[i-1]。
2) 本年新出生的小母牛数目等于到今年可以生育的母牛的数目—是三年前的母牛总数–f[i-3]。
f[i]=f[i-1]+f[i-3]—递推公式
(来自张老师的PPT)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int i,n;
    long long int f[55];
    while(scanf("%d",&n)!=EOF&&n)
    {
        f[1]=1;
        f[2]=2;f[3]=3;f[4]=4;
        for(i=5; i<=n; i++)
        {
            f[i]=f[i-1]+f[i-3];
        }
        printf("%lld\n",f[n]);
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44040169/article/details/88085169