webb


私信TA

用户名:webb

访问量:752

签 名:

等  级
排  名 39657
经  验 340
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 厦门大学
专  业

  自我简介:

【解题思路】

    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分

2 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区