兔子繁衍问题

原创 2017年08月15日 15:58:41

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

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

分析:
建一个兔子类,兔子有两个属性,年龄和最大年龄。然后可以定义三个函数,获取兔子实际年龄的函数,兔子死亡函数,兔子出生函数。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

//兔子类
class Rabbit
{
public:
    int age;
    int maxAge;
};

//获取兔子实际年龄
void getage(vector<Rabbit> &rab)
{
    for(vector<Rabbit>::iterator it = rab.begin(); it!=rab.end();it++)
    {
        it->age++;
    }
}

//兔子死亡函数
void death(vector<Rabbit> &rab)
{
    for(vector<Rabbit>::iterator it = rab.begin(); it!=rab.end();)
    {
        //当兔子实际年龄超过最大年龄时,兔子死亡
        if(it->age>=it->maxAge)
        {
            it = rab.erase(it);
        }
        else
        {
            it++;
        }
    }
}

//兔子出生函数
void increase(vector<Rabbit> &rab,int life)
{
    vector<Rabbit> Temp;
    for(vector<Rabbit>::iterator it = rab.begin(); it!=rab.end();it++)
    {
        //当兔子达到2岁时,可以繁衍
        if(it->age>=2&&it->age<it->maxAge)
        {
            Rabbit temp = {0,life};
            Temp.push_back(temp);
        }
    }
    for(auto life:Temp)
    {
        rab.push_back(life);
    }
}

int main()
{
    int x,y;
    cin>>x>>y;

    Rabbit rabbit1 = {0,x};
    Rabbit rabbit2 = {0,x};

    vector<Rabbit> rab;
    rab.push_back(rabbit1);
    rab.push_back(rabbit2);

    for(int i=1;i<=y;i++)
    {
        getage(rab);
        death(rab);
        increase(rab,x);
        //当兔子超过神10对,带走最老的1对
        if(rab.size()>20)
        {
            rab.erase(rab.begin());
            rab.erase(rab.begin());
        }
    }

    int num=0;
    for(auto x : rab)
    {
        num += x.age;
    }

    cout << num<<endl;

    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

问题  1. 猎人把一对兔子婴儿(一公一母称为一对)放到一个荒岛上,两年之后,它们生下一对小兔,之后开始每年都会生下一对小兔。生下的小兔又会以同样的方式继续繁殖。  2. 兔子的寿命都是x(x>=3)...

.net C# 利用session控制用户重复登录及统计在线用户数解决方案

近期做了个网站要求防止用户重复登录,及统计在线用户数量。在网上查了些资料,给出如下解决方案。经实际运行效果很好,整理例程上传。 例程详见:http://download.csdn.net/detai...
  • jlclyx
  • jlclyx
  • 2011-11-14 15:00
  • 2960

兔子繁衍问题求解(阿里巴巴2017在线编程题)

题目描述(大概): 在一个荒岛,一个猎人带去了一对刚出生的兔子(一公一母),兔子年龄为n,当兔子年龄大于2岁时每年会生下一对兔子,直到死去的前一年,每年末,当岛上兔子大于10对时,猎人会带走年龄最大...

第一章人工智能之机器学习算法体系汇总

参加完2017CCAI,听完各位专家的演讲后受益匪浅。立志写“人工智能之机器学习”系列,此为开篇,主要梳理了机器学习算法体系,人工智能相关趋势,Python与机器学习,以及结尾的一点感想。抱着一颗严谨...

KMP算法详讲

一.  简单匹配算法 先来看一个简单匹配算法的函数: int Index_BF ( char S [ ], char T [ ], int pos ) { /* 若串 S 中从第pos(S 的下标...

做自由职业者是怎样的体验

如果想自由职业,但还处在观望的阶段,可以来看看我的亲身体会
  • foruok
  • foruok
  • 2017-08-02 07:10
  • 18620

php 有关兔子的问题

  • 2011-03-16 16:46
  • 295B
  • 下载

兔子的繁殖问题

  • 2013-12-28 08:33
  • 230B
  • 下载

兔子问题:斐波那契数的三种解法!

问题描述:13世纪意大利数学家斐波那契在他的《算盘书》中提出这样一个问题:有人想知道一年内一对兔子可繁殖成多少对,便筑了一道围墙把一对兔子关在里面。已知一对兔子每一个月可以生一对小兔子,而一对兔子出生...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)