算法1004母牛的故事C++ - Go语言中文社区

算法1004母牛的故事C++


母牛的故事

算法题目

题目描述:
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

输入:
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。

输出:
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。

样例输入:
2
4
5
0

样例输出:
2
4
6

思路1:

int main()
{
    int age[10000]={0,4};   //数组中每个不为0的数,都是一头牛,数值表示年龄
    int year[55]={1,1};     //year[4]表示第四年牛的数量
    int y;
    int s=1;    //牛的数量,过度数值
    for(y=1;y<=54;y++)      //经过54个循环,分别计算54年的牛数
    {
        for(int n=1;age[n]!=0;n++)      //每一年遍历一次age数组
        {
            if(age[n]<4){               //如果牛的年龄小于4,年龄+1
                age[n]++;
            }
            else{                       //如果牛的年龄等于4,数组中产生新的牛,新牛年龄为1
                age[++s]=1;
            }
        }
        year[y+1]=s;                    //遍历一次后将牛的数目赋值给year数组
    }
    for(int n=1;n<=54;n++)
    {
        cout<<n<<"   "<<year[n]<<endl;
    }
    return 0;
}

这是我想到的第一个解决方案,但是存在问题:
int数组的长度受到限制,每多一头牛,数组中就要多一个数,数组长度不是无限的。
在这里插入图片描述

思路2:

int main()
{
    int a=0,b=0,c=0,d=1,s;          //按年龄给牛分abcd类,a是1岁,b是2岁,c是3岁,d是四岁,s是sum
    int a1,b1,c1,d1;                //中间计算使用的数值
    int x[55]={1,0};                //数组x存储牛的数量,x[3]表示第三年牛的数量
    for(int n=1;n<=55;n++)          //55次循环,计算每年的牛数,并存储在数组x中
    {
        a1=c+d;b1=a;c1=b;d1=d+c;    //一岁的牛等于前一年三岁和四岁的牛的数量和,二岁的牛等于去年一岁的牛的数量
        a=a1;b=b1;c=c1;d=d1;
        s=a+b+c+d;                  //求和
        x[n+1]=s;                   //存储
        //cout<<s<<endl;;
    }

    int y[55],i=0;                  //后面的代码用于输入和输出
    while(1)
    {
        cin>>y[i];
        if(y[i]==0)break;
        i++;
    }
    //cout<<"changshi"<<endl;
    //cout<<"i="<<i<<endl;
    for(int n=0;n<i;n++)
    {
        cout<<x[y[n]]<<endl;
    }
}

通过这个方法,即完成了要求,又不会超过数组限制
在这里插入图片描述
在这里插入图片描述

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_43298035/article/details/88260916
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢