【1312】【例3.4】昆虫繁殖

【问题描述】
       科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵(过x个月产卵),问过z个月以后,共有成虫多少对?0≤x≤20,1≤y≤20,X≤z≤50。
【输入】
       x,y,z的数值。
【输出】
       过z个月以后,共有成虫对数。
【输入样例】
       1 2 8
【输出样例】
       37
【算法分析】
       题目中要求的是z个月后的成虫个数,即第z+1个月的成虫个数。我们只需定义一个数组a存储每个月成虫的个数。考虑到每个月会有卵变成新的成虫,所以我们还需定义一个数组b存储每个月的新增卵的数量。
       递推公式为 a[i] = a[i-1] + b[i-2]。(第i个月的成虫数量a[i],等于第(i-1)个月的成虫数量a[i-1],加上第(i-2)个月的新增卵数量b[i-2])
【参考程序】

#include 
#include 
using namespace std;

int main() {
      
	long long a[101];					// a[i]存储第i个月的成虫数量
	long long b[101];					// b[i]存储第i个月新增卵的数量
	int x, y, z;
	cin >> x >> y >> z;					// 过x个月产y对卵,过z个月 
	
	for (int i=1; i<=x; i++) {
     
		a[i] = 1;
		b[i] = 0; 
	} 
	
	for (int i=x+1; i<=z+1; i++) {
     		// 因为要统计到底z个月后,所以要for到z=1 
		b[i] = y * a[i-x];				// 第i个月新增卵的数量b[i] = x个月之前成虫的数量a[i-x] * 每对成虫产卵的数量y 
		a[i] = a[i-1] + b[i-2]; 		// 第i个月的成虫数量a[i] = 第i-1个月的成虫数量a[i-1] + 第i-2个月新增卵的数量b[i-2] 
	}
	
	cout << a[z+1] << endl;	
	
	return 0;
}

你可能感兴趣的:(信奥一本通,基础算法,递推算法,算法)