【刷题第六天】递推——C++
作者:互联网
【题目描述】
科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵(过x个月产卵),问过z个月以后,共有成虫多少对?0≤x≤20,1≤y≤20,X≤z≤50。
【输入】
x,y,z的数值。
【输出】
过z个月以后,共有成虫对数。
【输入样例】
1 2 8
【输出样例】
37
起初我以为卵长成成虫后第一次要过一个月+x个月才能产卵,想的很复杂,结果不管哪次两个月长成成虫后过x个月就可以产卵了。阅读理解不行啊,语文要重读了,天。
1 #include <iostream> 2 using namespace std; 3 int main() { 4 int x, y, z; 5 long long cc[52] = { 0 }; //52是从下标1开始然后最多过51个月,z最大为50,求的是z个月过后,所以是51个月。下面for循环到z+1也是这个理由。 6 long long luan[52] = { 0 }; //定义一定要为long long到最后数字会很大。 7 cin >> x >> y >> z; 8 for (int i = 1; i <= x; i++) 9 { 10 cc[i] = 1; 11 luan[i] = 0; 12 } 13 for (int i = x+1; i <= z+1; i++) 14 { 15 luan[i] = y*cc[i - x]; 16 cc[i] = luan[i - 2] + cc[i - 1]; 17 } 18 cout << cc[z + 1]; 19 return 0; 20 }
标签:产卵,int,long,52,C++,成虫,长成,递推,刷题 来源: https://www.cnblogs.com/zymzymzym/p/13173923.html