原题链接:信息学奥赛一本通T1312-昆虫繁殖
/*
题目描述
科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵(过X个月产卵),问过Z个月以后,共有成虫多少对?0≤X≤20,1≤Y≤20,X≤Z≤50。
输入格式
x,y,z的数值。
输出格式
过Z个月以后,共有成虫对数。
样例输入
1 2 8
样例输出
37
*/
#include <iostream>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int x,y,z;
cin>>x>>y>>z; //成虫过x月繁殖,一对成虫一次生多少对,实验到z月停止
long long a[100]={0}; //存储每个月的成虫数量
int v=1-(x+2); //因为繁殖出的卵需要2个月加x月后才能繁殖
a[0]=1; //第一个月只有一对成虫
for(int i=1;i<=z;i++){
if(v<0){ //卵和暂时不能繁殖的成虫
a[i]+=a[0];
v++;
//cout<<i<<"月:"<<a[i]<<endl;
continue;
}
a[i]=a[i-1]+a[i-(x+2)]*y; //这是个递推公式:当第二对成虫开始繁殖后数量就是前一次的成虫加上卵孵化长大后(可繁殖)的数量*y;
v++;
//cout<<i<<"月:"<<a[i]<<endl;
}
cout<<a[v+x+1]<<endl; //Z个月后要加上刚刚长大的成虫
return 0;
}
0 分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复