【解题思路】

    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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论