解题思路:
采用递归的做法,我么需要考虑每一年母牛的数量和前面几年之间的关系,写出递推公式,就能轻松写出代码。
我们以f(n)表示第n年母牛的数量。
第一年:f(1)=1,只有一只母牛。
第二年:f(2)=f(1)+f(1),可以这样考虑,第二年就是第一年母牛的数量加上第一年母牛的数量,在到达第五年之前,每一年都是前一年母牛的数量加第一年,因为在 第五年之前,每一年都只有第一年存在的那只母牛会生一只。由于第二只母牛是第二年生的,所以在第五年它才能生下一只。
第五年:f(5)=f(4)+f(2),第五年,首先第四年的母牛数目都在,这时,第二年生的那只母牛也开始生,所以相当于第四年的母牛数加上第二年的母牛数,因为第二年的母牛都开始生。
第六年:f(6)=f(5)+f(3),类似的,第六年,第三年存在的那部分母牛全部开始生,所以这一年所有增加的母牛全是第三年存在的母牛生产的。
第七年:f(7)=f(6)+f(4)
后续全部类似。
注意事项:
考虑不同的几个阶段,每一年新增的母牛都是前一年的数目加上新生的,我们只要考虑在这一年增加的母牛是前面哪一年已经存在的全部母牛生产的即可。
在第五年之前,只有第一年的那一只最初的母牛会生产,第五年之后,就是三年前的母牛全部会生产。
参考代码:
#include <iostream>
using namespace std;
int cow_count(int n)
{
if(n==1)
return 1;
else if(n<=4)
return cow_count(n-1)+1;
else
return cow_count(n-1)+ cow_count(n-3);
}
int main()
{
int n;
cin >> n;
while(n)
{
cout << cow_count(n) << endl;
cin >> n;
}
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复