科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵(过X个月产卵),问过Z个月以后,共有成虫多少对?0≤X≤20,1≤Y≤20,X≤Z≤50。
x,y,z的数值。
过Z个月以后,共有成虫对数。
#include<iostream> #include<string.h> using namespace std; int x,y,z; int main() { cin>>x>>y>>z; long long a[100],b[100]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); for(int i=1;i<=x;i++) { b[i]=0; a[i]=1; #ifdef debug cout<<a[i]<<endl; #endif } for(int i=x+1;i<=z+1;i++) //因为是z后的那个月的成虫,所以是循环到z+1 { b[i]=y*a[i-x]; //新的虫子,最年轻的那些能繁殖的虫子生的 a[i]=a[i-1]+b[i-2]; //a[i-1]所有老的成虫 //b[i-2]是两个月前的卵,也就是这个月的最年轻的成虫 #ifdef debug cout<<"second: "; cout<<a[i]<<endl; #endif } cout<<a[z+1]<<endl; return 0; }
原文:https://www.cnblogs.com/xuwanwei/p/10896762.html