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


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

输入: 
x //兔子的寿命 

y //若干年以后 
输出: 
n //所有兔子的年龄之和 

思路:
结构体:兔子年龄和最大年龄
遍历Y年{
每只年龄在2-(maxAge-1)之间的兔子都生只兔子(两只生两只,就是一只生一只);
年龄>=maxAge的兔子仙逝;
若岛上只数>20只,则带走年龄最大的4只兔子。
}
累加岛上兔子年龄。


*/
#include<iostream>  
#include <vector>  
#include <algorithm>  
using namespace std;
struct Rab
{
	int age;
	int maxAge;
};
void AgeAdd(vector<Rab> &sum) {
	vector<Rab>::iterator it;
	for (it = sum.begin(); it != sum.end(); it++) {
		it->age++;//年龄加1
	}
}
void Dead(vector<Rab> &sum) {
	vector<Rab>::iterator it;
	for (it = sum.begin(); it != sum.end();) {
		if (it->age >= it->maxAge)//达到最大年龄,仙逝
			it = sum.erase(it);
		else
			it++;
	}
}
void Birth(vector<Rab> &sum, int x) {
	vector<Rab>Temp;
	vector<Rab>::iterator it;
	for (it = sum.begin(); it != sum.end(); it++) {//每一对兔子每年生一对兔子,相当于每一年每一只兔子生一只兔子
		if (it->age >= 2 && it->age < it->maxAge)//年龄在两岁到最大岁减一之间可以生小兔
		{
			Rab newborth = { 0, x };
			Temp.push_back(newborth);
		}
	}
	for (vector <Rab>::iterator iter = Temp.begin(); iter != Temp.end(); iter++){
		sum.push_back((*iter));
	}
//以下是上述for循环的简略写法,参考auto在容器中的用法
	//for (auto x : Temp)
	//	sum.push_back(x);
}

int main()
{
	int x, y;//寿命和年数
	cin >> x >> y;
	//Rab R1 = { 0, x };//公
	Rab R2 = { 0, x };//母
	vector<Rab> sum;
	sum.push_back(R1);
	//sum.push_back(R2);
	for (int i = 0; i < y; i++) {//遍历年数,一共y年
		AgeAdd(sum);//年龄增长
		Dead(sum);//兔子仙逝
		Birth(sum, x);//兔子出生
		if (sum.size() > 20) {//兔子数多于十对,带走两对最老的
			sum.erase(sum.begin());
			sum.erase(sum.begin());
			sum.erase(sum.begin());
			sum.erase(sum.begin());
		}
	}
	int num = 0;
	for (vector <Rab>::iterator iter = sum.begin(); iter != sum.end(); iter++){
		num = num + (*iter).age;
	}
//以下是上述for循环的简略写法,参考auto在容器中的用法
	//for (auto x : sum)
		//num = num + x.age;
	cout << num << endl;
}