给定繁殖率的C++中,a、b和c在n秒后的数量
给定三个数字'a'、'b'和'c'作为输入。目标是在n秒后找到'a'、'b'和'c'的数量/值,其繁殖率为:
- 每隔2秒,每个a都会变成b
- 每隔5秒,每个b都会变成c
- 每隔12秒,每个c都会变成2个a。
让我们用例子来理解。
例如
输入 - n_seconds = 62 a = 1 b = 1 c = 1
输出 - 给定繁殖率下,n秒后a的数量为:0
给定繁殖率下,n秒后b的数量为:33
给定繁殖率下,n秒后c的数量为:1
解释 - 60秒后,a将为32,b = 0,c = 0。
再过2秒,所有b都将变成c,c=1。所有a变成b,b=33。
输入 - n_seconds = 20 a = 1 b = 1 c = 1
输出 - 给定繁殖率下,n秒后a的数量为:0
给定繁殖率下,n秒后b的数量为:0
给定繁殖率下,n秒后c的数量为:6
解释
1秒:- a=1,b=1,c=1
2秒:- a=0,b=2(1+1) ,c=1 → 2秒后a变为b
4秒:- a=0,b=2 ,c=1 → 2秒后a变为b
5秒:- a=0,b=0 ,c=3 (1+2) → 5秒后b变为c
6秒:- a=0,b=0 ,c=3 → 2秒后a变为b
8秒:- a=0,b=0 ,c=3 → 2秒后a变为b
10秒:- a=0,b=0 ,c=3 → 5秒后b变为c
12秒:- a=6 (0+2*3),b=0 ,c=0 → 12秒后c变为2a
14秒:- a=0,b=6(0+6) ,c=0 → 2秒后a变为b
15秒:- a=0,b=0 ,c=6(0+6) → 5秒后b变为c
16秒:- a=0,b=0 ,c=6 → 2秒后a变为b
18秒:- a=0,b=0 ,c=6 → 2秒后a变为b
20秒:- a=0,b=0 ,c=6 → 5秒后b变为c
下面程序中使用的方案如下
秒数的最小公倍数为60(2、5、12)。因此,每隔60秒,a、b和c的变化将是
60秒→ a= 32,b=0,c=0
120秒→ a= 32*32 ,b=0,c=0
180秒→ a= 32*32*32 ,b=0,c=0。
对于以60为倍数的秒数,按上述方法计算a的值。对于非倍数,计算最接近的倍数temp,然后从temp+1遍历到输入秒数,并使用模2、5或12进行计算。
- 将数字a、b和c作为输入。
- 将n_seconds作为以秒为单位的时间。
- 函数reproduction_rate(int n_seconds, int a, int b, int c)获取所有参数,并打印给定繁殖率下n秒后a、b和c的数量。
- 将temp = n_seconds / 60作为n_seonds以下的60的倍数。
- 根据公式计算a = (int)pow(32, temp)。( atemp )
- 现在将temp更新为60 * temp,以获得小于或等于n_seconds的最接近的60的倍数。
- 现在使用for循环从i=temp+1遍历到i=n_seconds。
- 如果数字i是2的倍数,则通过添加a并使a为0来更新b。
- 如果数字i是5的倍数,则通过添加b并使b为0来更新c。
- 如果数字i是12的倍数,则通过添加2c并使c为0来更新a。
- 在for循环结束时,打印a、b和c的最终值。
示例
#include <bits/stdc++.h> using namespace std; void reproduction_rate(int n_seconds, int a, int b, int c) { int temp = n_seconds / 60; a = (int) pow(32, temp); temp = 60 * temp; for (int i = temp + 1; i <= n_seconds; i++) { if (i % 2 == 0) { b = b + a; a = 0; } if (i % 5 == 0) { c = c + b; b = 0; } if (i % 12 == 0) { a = a + (2 * c); c = 0; } } cout << "Count of a after n seconds for given reproduction rate is: " << a << "\n"; cout << "Count of b after n seconds for given reproduction rate is: " << b << "\n"; cout << "Count of c after n seconds for given reproduction rate is: " << c; } int main() { int n_seconds = 72; int a = 2; int b = 1; int c = 1; reproduction_rate(n_seconds, a, b, c); return 0; }
如果我们运行以上代码,它将生成以下输出:
输出
Count of a after n seconds for given reproduction rate is: 68 Count of b after n seconds for given reproduction rate is: 0Count of c after n seconds for given reproduction rate is: 0