输入: 从命令行输入两行整数,第一行是x,第二行是y
输出: y年后荒岛上所有的兔子岁数的总和
输入:
x //兔子的寿命
y //若干年以后
输出:
n //所有兔子的年龄之和
#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; }