解题思路:
这道题看起来很复杂,我们首先要理清解题思路。我们可以找一找规律。如下图,当第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分
4 人评分
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:574 |
C二级辅导-阶乘数列 (C语言代码)浏览:691 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:509 |
1642题解浏览:715 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:529 |
1035 题解浏览:785 |
敲七 (C++代码)浏览:1056 |
C语言训练-8除不尽的数 (C语言代码)浏览:1402 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:506 |
筛排处理 (C语言代码)浏览:786 |