兔子繁衍问题

原创 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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fan_xingwang/article/details/77195863

循环-05. 兔子繁衍问题

一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对? 输入格式: ...
  • u010399331
  • u010399331
  • 2014-08-01 19:52:29
  • 6805

zzuli OJ 1055: 兔子繁殖问题

Description 这是一个有趣的古典数学问题,著名意大利数学家Fibonacci曾提出一个问题:有一对小兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。...
  • sinat_25926481
  • sinat_25926481
  • 2015-08-28 16:26:16
  • 6890

5-29 兔子繁衍问题   (15分)

一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到NN对? 输入格式: ...
  • yeternity
  • yeternity
  • 2017-05-09 18:43:51
  • 482

10月4日 c语言 兔子繁殖问题:(Fibonacci 数列问题)

#include int main() { int f1=1,f2=1,f3; int i; printf("%12d\n%12d\n",f1,f2); for(i=1;i { f3=...
  • Wyq584657515
  • Wyq584657515
  • 2017-10-04 00:35:46
  • 1848

【经典算法】:兔子繁殖问题

有一种动物,它出生后两天后就开始以每天一只得速度繁殖,假设有一天,有一只这样的动物(该动物刚出生,从第三天开始繁殖后代),到第11天,共有多少只?有一个非常明智的思考,思考过程如下: 我们思考第N天...
  • qq_23100787
  • qq_23100787
  • 2016-03-01 13:09:28
  • 3854

每日一题 No.15 兔子繁殖问题(斐波那契数列)

本题要求:一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么n个月以后共有多少对兔子?输入格式:输入一个数n (1...
  • linglian0522
  • linglian0522
  • 2017-04-11 12:20:21
  • 471

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

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

7-10 兔子繁衍问题(15 分)

7-10 兔子繁衍问题(15 分) 一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几...
  • qq_40938335
  • qq_40938335
  • 2017-12-28 15:58:38
  • 119

java面试常用算法题深入剖析之兔子繁殖问题

1.背景 突发奇想的想补充下java算法中的知识,于是网上百度,java面试常用的的算法,j...
  • weixin_38699282
  • weixin_38699282
  • 2017-06-01 09:17:25
  • 884

循环-05. 兔子繁衍问题(15)

一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对? 输入格式: ...
  • oFengWuYu1
  • oFengWuYu1
  • 2014-05-26 08:41:09
  • 1693
收藏助手
不良信息举报
您举报文章:兔子繁衍问题
举报原因:
原因补充:

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