题目:
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;
}