【题目描述】
科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵(过X个月产卵),问过Z个月以后,共有成虫多少对?0≤X≤20,1≤Y≤20,X≤Z≤50。
【输入】
x,y,z的数值。
【输出】
过Z个月以后,共有成虫对数。
【输入样例】
1 2 8
【输出样例】
37
【思路】
递推,要考虑的点在于,x月后繁殖和两个月幼虫才能变成成虫,要求成虫数量,可以考虑用两个数组分别存储每个月成虫数量和繁殖数量。
【源代码】
#include <iostream>
using namespace std;
#define LL long long
int main()
{
LL a[101] = {0},b[101] = {0};
LL x,y,z;
cin >> x >> y >> z;
for(LL i=1;i<=x;i++)
{
a[i] = 1;//第i月成虫数量
b[i] = 0;//第i月繁殖数量
}
for(LL i=x+1;i<=z+1;i++)//第z月后,所以是z+1
{
b[i] = y*a[i-x];//成虫x月后繁殖
a[i] = a[i-1] + b[i-2];//上个月数量加上繁殖数量,且幼虫需要两个月成熟
}
cout << a[z+1] <<endl;
return 0;
}