解题思路:
根据题目列出表格如下:
年龄 1 2 3 4 牛总数
年份
1 0 0 0 1 1
2 1 0 0 1 2
3 1 1 0 1 3
4 1 1 1 1 4
5 2 1 1 2 6
6 3 2 1 3 9
7 4 3 2 4 13
...
表中的数据是每个年龄段的母牛数量,由于当母牛4岁时才开始生小母牛,故前4年都只有原来的一只大母牛在生崽;要算出表中的数据,可把年龄为1,2,3的母牛个数整体挪移到后一年去加上,再把年龄为4的母牛放到年龄为1的母牛上面形成闭环。随着时间的推移,可知前四年的母牛数量与年份相等,从第五年开始需要靠前四年的母牛数计算得知。仔细观察表格可以发现:第四年的母牛数=第三年的母牛数+第一年的母牛数;第五年的母牛数=第四年的母牛数+第二年的母牛数。...以此类推可得出公式:a(n)=a(n-1)+a(n-3)。则可利用递归的方法求解此题。
注意事项:
需知晓公式:a(n)=a(n-1)+a(n-3)的由来。
参考代码:
#include<iostream>
using namespace std;
int dfs(int year)
{
if (year <5)//年份为1,2,3,4时母牛数等于年份数,直接返回年份数即可
return year;
else
return dfs(year - 1) + dfs(year - 3);//当年份大于4年时,套用公式a(n)=a(n-1)+a(n-3)即可
}
int main()
{
int a;
while (cin >> a && a > 0 && a < 55)//输入数据a,且0<a<55
cout << dfs(a) << endl;//输出第a年的母牛总数
return 0;
}
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复