解题思路:
这道题看起来很复杂,我们首先要理清解题思路。我们可以找一找规律。如下图,当第n年时,共有a头母牛。
第n年 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
共有a头母牛 | 1 | 2 | 3 | 4 | 6 | 9 | 13 | 19 | 28 |
看完表格,你有没有发现规律?好像没有诶!有规律吗?
规律是有的,但是只有思维活跃的大脑才能发现规律。这是需要时间的。我们要有一双善于观察,善于发现规律的眼睛。
规律:每一年(年数 > 3)母牛的数量 = 前3年母牛的数量 + 前1年母牛的数量
每一年(年数 ≤ 3)母牛的数量 = 每一年的年数
恍然大悟了吧!
既然知道规律了,那么程序就好编写了。
参考代码:
def _cow(year, n1, n2, n3): # 需要两个函数来完成递归,必须知道前三年的母牛数 if year == 0: # 当年数等于0时,把最终结果返回 return n3 return _cow(year - 1, n2, n3, n1 + n3) # 每一年(年数 > 3)母牛的数量 = 前3年母牛的数量 + 前1年母牛的数量 def cow(year): if year < 4: # 每一年(年数 ≤ 3)母牛的数量 = 每一年的年数 return year else: return _cow(year - 3, 1, 2, 3) def main(): # 主函数 years = [] while True: years.append(int(input())) if years[len(years) - 1] == 0: del years[len(years) - 1] for year in years: print(cow(year)) break if __name__ == '__main__': main() |
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复