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

15 篇文章 0 订阅

题目链接: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;  
}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值