【解题思路】
1到3岁的小牛不生产,只有4岁及以上的大牛才产仔,可见,不同年龄段的母牛有质的差别,
因此,可以用一个标记数组来表示不同年龄段的牛,分别进行操作。
对于本题的情况,不妨声明int cow[4],用其4个元素分别表示1岁、2岁、3岁、4岁或以上的牛,
每到年初,各个牛都会长大1岁,并且长到4岁或以上的母牛会产下一个1岁的牛犊。
【本法优点】
扩展性好。动态分配cow[]即可实现动物在其他任何岁数时生产的情况,并且可以通过初始化cow[]
来任意设置初始状态,而不受限于从一头成熟母牛开始生产的情况。
时间及空间复杂度良好。处理一个值为n的数据的时间复杂度为O(n),空间复杂度为O(1),是常数。
【参考代码】
#include<stdio.h>
int main()
{
int a;
while(~scanf("%d", &a))
{
if(a<=0) break; //读到0则结束
else
{
int cow[4]={0,0,0,1}; //第1年开始时,仅一头4岁以上的成熟母牛
for(int year=1; year<a; year++) //时间按年流逝
{
cow[3]+=cow[2]; //每年初,各年龄段的牛纷纷长大一岁
cow[2]=cow[1];
cow[1]=cow[0];
cow[0]=cow[3]; //成熟了的母牛各产下一头小牛犊
}
printf("%d\n", cow[0]+cow[1]+cow[2]+cow[3] );
}
}
return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复