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

 

【题目描述】

在所有的N位数中,有多少个数中有偶数个数字3?由于结果可能很大,你只需要输出这个答案对12345取余的值。

【输入】

读入一个数N(N≤1000)。

【输出】

输出有多少个数中有偶数个数字3。

【输入样例】

2

【输出样例】

73

 1 #include <iostream>
 2 using namespace std;
 3 int main() {
 4     int f[1001][2], N, n = 9;
 5     cin >> N;
 6     f[1][0] = 9;
 7     f[1][1] = 1;
 8     for (int i = 2; i <= N; i++)
 9     {
10         if (i == N) {
11             n = 8;
12         }
13         f[i][0] = f[i - 1][0] * n + f[i - 1][1];
14         f[i][1] = f[i - 1][0] + f[i - 1][1] * n;
15         f[i][0] = f[i][0] % 12345;
16         f[i][1] = f[i][1] % 12345;
17     }
18     cout << f[N][0];
19     return 0;
20 }

参考https://blog.csdn.net/weixin_45592404/article/details/103776193

 

posted @ 2020-06-21 20:44  zym112233  阅读(477)  评论(0)    收藏  举报