淘先锋技术网

首页 1 2 3 4 5 6 7

问题:
有一种昆虫,每过x个月产y对卵,每对卵需要2个月才能长成成虫。假设每对成虫不死,并且每对卵刚张成成虫的第一个月不产卵(过x个月产卵)。第一个月只有一对成虫,问z个月后有多少对成虫?

分析:
题目中要求的是z个月后的成虫个数,即第z+1个月的成虫个数。我们只需定义一个数组存储每一个月成虫的个数。考虑到每个月可能会有卵变成新的成虫,所以只要另存一下每个月的新增卵的数量就可以了。

递推式即为f[x]=f[x-1]+s[x-2] (f[x]为第x个月的成虫数量,s[x]为第x个月的新增卵数量)。
代码:

#include<iostream>
#include<cstdio>
using namespace std;
long int f[55];
long int s[55];
int main()
{
	int x,y,z;//x个月产y对
	cin>>x>>y>>z;
	f[1]=1;
	for(int i=2;i<=z+1;i++)
	{
		f[i]=f[i-1]+s[i-2];
		if(i>=x)    s[i]=f[i-x]*y;
	}
	cout<<f[z+1]<<endl;
	return 0;
}