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

浙公网安备 33010602011771号