解题思路:
首先在表格上画一下,方便理解本题
年份\年龄 | 1岁 | 2岁 | 3岁 | 成年 | 总数 |
第一年 | 0 | 0 | 0 | 1 | 1 |
第二年 | 1 | 0 | 0 | 1 | 2 |
第三年 | 1 | 1 | 0 | 1 | 3 |
第四年 | 1 | 1 | 1 | 1 | 4 |
第五年 | 2 | 1 | 1 | 2 | 6 |
那么接下来稍微找一下规律就会发现其实非常简单,
根据表格可以很明显的找到一年就是会增加一个,
那么我们利用函数的参数定义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循环,不然进入递归
0.0分
5 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复