hdu-2018 母牛的故事(递推)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2018
题意是牛分为母牛和小母牛,目标是求出每年的总母牛数(母牛+小母牛)。

分析:

由输入输出样例来看,第1年只有一头母牛,并且没有生下牛,第二年年初生下一头牛。
由递推关系看,第n年的母牛数f(n)由两部分组成:
1.原有母牛的数量:由于没有死亡,去年是母牛(包含了所有小母牛,就算今年成年,也包括在内),今年仍然是母牛,则第n-1年的母牛数为f(n-1).
2.今年新出生母牛的数量:今年出生的母牛一定是由之前是母牛和刚刚今年成年的母牛生下的,那么数量为f(n-3)

所以f(n)=f(n-1)+f(n-3)

解决:

因此得到完整递推公式:f(1)=f(2)=f(3)=n(0

拓展:

question:如果要得到第n年的小母牛数量,应该怎么做?

代码:

#include <stdio.h>  

// 递推式 f(n) = n n<=4,f(n) = f(n-1) + f(n-3) n>4  
int cow(int n)  
{  
    if(n <= 4)  
        return n;  
    else  
        return cow(n-1) + cow(n-3);  
}  

int main(void)  
{  
    int n;  

    while(scanf("%d", &n) != EOF) {  
        // 判定结束条件  
        if(n == 0)  
            break;  

        // 计算并输出结果  
        printf("%d\n", cow(n));  
    }  

    return 0;  
}  

猜你喜欢

转载自blog.csdn.net/qq_38786209/article/details/80061345