兔子繁衍问题

原创 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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

兔子繁殖问题 - 两种递归思路

兔子繁殖问题 - 两种递归思路 有一对兔子出生,从第三月起,每个月生一对兔子,出生的兔子也是第三月起每个月生一对兔子,请问2年后,共有多少只兔子? 分析思路—— 斐波那契...
  • linfeng24
  • linfeng24
  • 2014年05月17日 09:42
  • 1267

Java算法之“兔子问题”

有一只兔子,从出生后第3个月起每个月都生只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?...
  • ditandaren
  • ditandaren
  • 2016年10月12日 16:57
  • 2012

黑马程序员——致java初学者:代码编写完整流程(兔子问题案例)

代码编写完整流程(兔子问题案例) /************************************* ****代码编写完整流程(兔子问题案例)**** **********...
  • ZEUS00456
  • ZEUS00456
  • 2014年08月09日 22:08
  • 1161

非常经典的JAVA编程题(兔子规律)

代码下载:https://github.com/IsResultXaL/Algorithm/blob/master/src/rabbit.java题目:古典问题:有一对兔子,从出生后第3个月起每个月都...
  • IsResultXaL
  • IsResultXaL
  • 2016年04月28日 17:28
  • 4513

【Java学习之代码学习】 Prog01_兔子生兔问题

每日一题(有精力的同学可以解答下):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?...
  • ljb568838953
  • ljb568838953
  • 2016年11月29日 15:31
  • 716

java编程:斐波那契数列经典案例:兔子问题

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?package com.java.recursion...
  • lovoo
  • lovoo
  • 2016年06月17日 21:29
  • 2840

关于兔子问题(斐波那契数)的Java实现--采用面向对象的方式

最近接触到一个有趣的兔子问题(斐波那契数),在网上看了看基本都是一些C语言的解决方案,涉及到一些高深的算法,所以就想用面向对象的思想来解决一下这个问题. 先附上问题:有人想知道一年内一对兔子可繁殖成...
  • yaohoohi
  • yaohoohi
  • 2015年11月10日 21:53
  • 1438

10_python_练习题——兔子问题与斐波那契數列

#题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子, #假如兔子都不死,问每个月的兔子总数为多少? #通过数学分析我们知道,兔子的规律为数列1,...
  • qiqiyingse
  • qiqiyingse
  • 2017年03月02日 14:36
  • 4040

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

问题描述:13世纪意大利数学家斐波那契在他的《算盘书》中提出这样一个问题:有人想知道一年内一对兔子可繁殖成多少对,便筑了一道围墙把一对兔子关在里面。已知一对兔子每一个月可以生一对小兔子,而一对兔子出生...
  • zhang5476499
  • zhang5476499
  • 2013年10月30日 19:02
  • 2251

五十道编程小题目 --- 01 兔子三月生兔子问题java

【程序1】  题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?【即 斐波那契数列】 1.程序分析:...
  • wangnanwlw
  • wangnanwlw
  • 2016年08月24日 17:12
  • 1065
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:兔子繁衍问题
举报原因:
原因补充:

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