阿里在线编程测验——兔子繁衍问题

1. 猎人把一对兔子婴儿(一公一母称为一对)放到一个荒岛上,两年之后,它们生下一对小兔,之后开始每年都会生下一对小兔。生下的小兔又会以同样的方式继续繁殖。 
2. 兔子的寿命都是x(x>=3)年,并且生命的最后一年不繁殖。 
3. 如果岛上的兔子多于10对,那么猎人会每年在兔子们完成繁殖或者仙逝之后,从岛上带走两对最老的兔子。 
请问y年(y>=3)后荒岛上所有的兔子加起来多少岁?(注意, 在条件3执行完之后)

输入: 从命令行输入两行整数,第一行是x,第二行是y 
输出: y年后荒岛上所有的兔子岁数的总和

 样例测试:

x=3,y=3 返回2.

x=4,y=6,返回14.

思路:

用一个vector模拟一个队列,里面存储的是兔子年龄,如果兔子到达可以生育的年龄,就将新的兔子放在队列后,初始是0岁。

x年后,一定是队列靠前的年龄大,用一个索引来标注当前岛上所有兔子的开始下标,索引之前的都仙逝或者被带走。

int rabbit()
{
    int x, y;
    cin >> x >> y;
    //if (y <= 2)return y;
    
    vector<int>life;
    life.push_back(0);
    int start = 0, end;
    for (int i = 1; i <= y;i++)
    {
        end = life.size();
        for (int j = start; j < end;j++)//更新岁数
        {
            life[j]++;
            if (life[j] >= 2 && life[j]< x )//生育
            {
                life.push_back(0);
            }
            if (life[j] >= x)start++;//仙逝
             
        }
        end = life.size();
        if (end-start>10)
        {
            start += 2;
        }
    }
    int ret = 0;
    for (int i = start; i < end;i++)
    {
        ret += life[i];
    }
    return 2*ret;
}
原文地址:https://www.cnblogs.com/hellowooorld/p/7406802.html