【问题描述】
小民发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月后开始产卵,每个月产y对卵;每对卵要过3个月长成成虫(1<=x,y<=20; x<z<=50)。
假设:每个成虫不死,第一个月有一对成虫,问第z个月有多少对成虫。
【输入形式】
1行:三个空格隔开的整数x,y,z
【输出形式】
1行:1个整数,即第n个月的昆虫的数量。
【样例输入1】
1 2 8
【样例输出1】
9
【样例输入2】
3 2 10
【样例输出2】
9
【样例说明】
数据:
月 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
成虫 | 1 | 1 | 1 | 1 | 3 | 5 | 7 | 9 | 15 | 25 |
产卵 | 0 | 2 | 2 | 2 | 2 | 6 | 10 | 14 | 18 | 30 |
推导:
月 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
成虫:老+新(产卵[月]) | 1 | 1 | 1 | 1 | 1+2[2] | 3+2[3] | 5+2[4] | 7+2[5] | 9+6[6] | 15+10[7] |
产卵[月] | 0 | 2[2] | 2[3] | 2[4] | 2[5] | 3*2[6] | 5*2[7] | 7*2[8] | 9*2[9] | 15*2[10] |
#include<iostream>
using namespace std;
long long a[101],b[101];
//a数组存储每个月的成虫数量
//b数组存储每个月的繁殖数量
int main(){
int x,y,z;
cin>>x>>y>>z;
for(int i=1;i<=x;i++)
{
a[i]=1;//第i月成虫数量
b[i]=0;//第i月繁殖数量
}
for(int i=x+1;i<=z+1;i++)//第z月后,所以是z+1
{
b[i]=y*a[i-x];//成虫x月后繁殖的数量
a[i]=a[i-1]+b[i-3];//成虫的数量=上个月的成虫+上三个月的虫卵
}
cout<<a[z]<<endl;
return 0;
}