解题思路:


首先在表格上画一下,方便理解本题


年份\年龄1岁2岁3岁成年总数
第一年00011
第二年10012
第三年11013
第四年11114
第五年21126


那么接下来稍微找一下规律就会发现其实非常简单,

根据表格可以很明显的找到一年就是会增加一个,

那么我们利用函数的参数定义4个参数用来分别存储4个年龄,

但是有个 注意事项 是本题只要到了4岁就会瞬间生下一头牛,

所以在年份5这里1岁变成了2头,而不是1头。


代码实现上无非就是前一年1岁的都变成2岁了,2岁的变成3岁......

所以我们只需要把1岁的数量变量放到2岁即可


注意事项:

本题只要到了4岁就会瞬间生下一头牛,所以刚成年的3岁,要刚成年的曾经的3岁数+成年总数 才是1岁的数量

所以需要d += c


下面是参考代码:



def f(num, a=0, b=0, c=0, d=1):
    if num <= 1:
        print(a + b + c + d)
        return
    d += c
    f(num - 1, d, a, b, d)


while True:
    year = int(input())
    if year == 0:
        break
    f(year)


代码讲解:

首先定义一个名为 f的函数,并创建5个参数用于存储,

分别是存储年份(num),和4个年龄阶段(a, b, c, d)的参数,


首先判断结束条件,

根据题目(在第n年的时候,共有多少头母牛?)设置为年份,


然后由于之前提到的本题只要到4岁就会生下一头牛,

所以d+=c用于在接下来递归传参使用

num-1是已经历1年(递归一次),将由于成年母牛会生小牛,

所以a的位置放入d,然后将a放入b(因为已经过去一年),b也是同理



while True是无限循环,无限接受输入,

如果判断输入为0,那么结束While循环,不然进入递归


点赞(1)
 

0.0分

5 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论