2017阿里巴巴在线测试题

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

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

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

struct Rabbit  
{  
    int age;  
    int maxAge;  
};  

void Age(vector<Rabbit> &res) {  
    for (vector<Rabbit>::iterator it = res.begin(); it != res.end(); it++) {  
        it->age++;  
    }  
}  

void Dead(vector<Rabbit> &res) {  
    for (vector<Rabbit>::iterator it = res.begin(); it != res.end();) {  
        if (it->age >= it->maxAge)  
            it = res.erase(it);  
        else  
            it++;  
    }  
}  

void Broth(vector<Rabbit> &res, int x) {  
    vector<Rabbit>Tmp;  
    for (vector<Rabbit>::iterator it = res.begin(); it != res.end(); it++) {  
        if (it->age >= 2 && it->age < it->maxAge)  
        {  

            Rabbit tmp = { 0,x };  
            Tmp.push_back(tmp);  
        }  
    }  
    for (auto x : Tmp)  
        res.push_back(x);  
}  


int main()  
{  
    int x, y;  
    cin >> x >> y;  
    Rabbit R = { 0,x };  
    vector<Rabbit> res;  
    res.push_back(R);  
    for (int i = 1; i <= y; i++) {  
        Age(res);  
        Dead(res);  
        Broth(res,x);  
        if (res.size() > 10) {  
            res.erase(res.begin());  
            res.erase(res.begin());  
        }  
    }  
    int num = 0;  
    for (auto x : res)  
        num += x.age;  
    cout << num * 2 << endl;  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值