【刷题第六天】递推——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 }

猜你喜欢

转载自www.cnblogs.com/zymzymzym/p/13173923.html