1. 猎人把一对兔子婴儿(一公一母称为一对)放到一个荒岛上,两年之后,它们生下一对小兔,之后开始每年都会生下一对小兔。生下的小兔又会以同样的方式继续繁殖。
2. 兔子的寿命都是x(x>=3)年,并且生命的最后一年不繁殖。
3. 如果岛上的兔子多于10对,那么猎人会每年在兔子们完成繁殖或者仙逝之后,从岛上带走两对最老的兔子。
请问y年(y>=3)后荒岛上所有的兔子加起来多少岁?(注意, 在条件3执行完之后)
输入: 从命令行输入两行整数,第一行是x,第二行是y
输出: y年后荒岛上所有的兔子岁数的总和
样例测试:
x=3,y=3 返回2.
x=4,y=6,返回14.
思路:
用一个vector模拟一个队列,里面存储的是兔子年龄,如果兔子到达可以生育的年龄,就将新的兔子放在队列后,初始是0岁。
x年后,一定是队列靠前的年龄大,用一个索引来标注当前岛上所有兔子的开始下标,索引之前的都仙逝或者被带走。
int rabbit() { int x, y; cin >> x >> y; //if (y <= 2)return y; vector<int>life; life.push_back(0); int start = 0, end; for (int i = 1; i <= y;i++) { end = life.size(); for (int j = start; j < end;j++)//更新岁数 { life[j]++; if (life[j] >= 2 && life[j]< x )//生育 { life.push_back(0); } if (life[j] >= x)start++;//仙逝 } end = life.size(); if (end-start>10) { start += 2; } } int ret = 0; for (int i = start; i < end;i++) { ret += life[i]; } return 2*ret; }