递推算法--昆虫繁殖

题目描述:

科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。

每对成虫过x个月产y对卵,每对卵要过两个月长成成虫。

假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵(过X个月产卵).

问过Z个月以后,共有成虫多少对?0=<X<=20,1<=Y<=20,X=<Z<=50

【输入格式】     x,y,z的数值

【输出格式】     过Z个月以后,共有成虫对数

【输入样例】     1 2 8

【输出样例】     37

算法分析:

成虫的数量=上个月的成虫+上两个月的虫卵

边界条件:

f(z)含义:前z个月的成虫数,f(z+1) z月后的成虫数量, 单位:对

f(1)= 1,f(2)=1

递推:

新虫卵 b[i]=f[i-x]*y

成虫 f(i-1)+b[i-2]

代码实现:

#include<iostream>
using namespace std;
int main(){
  long long a[101]={0},b[101]={0},i,j,x,y,z;
  cin>>x>>y>>z;
  for(i=1;i<=x;i++){
       a[i]=1;
	   b[i]=0;
  }
  for(i=x+1;i<=z+1;i++){           //因为要统计到第z个月后,所以要for到z+1
      b[i]=y*a[i-x];
      a[i]=a[i-1]+b[i-2];                 
  }  
  cout<<a[z+1]<<endl;
  return 0;
}
发布了81 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41499217/article/details/102461082