用C++语言 不要C的哦~ 细菌繁殖有关问题
用C++语言 不要C的哦~~ 细菌繁殖问题
编程求解问题:有一种细菌,从其产生的第4分钟后,每分钟都产生一个同种细菌。若某初始时刻仅有一个这种细菌,那么此后第n分钟时共有多少种这种细菌?
提示:初始时刻(第t=0分钟),a(0)=1,b(0)=c(0)=d(0)=0,细菌总数为s(0)=a(0)+b(0)+c(0)+d(0)=1。下一时刻d(t+1)=c(t)+d(t),c(t)=b(t),b(t)=a(t),a(t)=d(t)。
拜托了~~
------解决方案--------------------
------解决方案--------------------
虽然我也发现牛角尖了,不过就题论题的话应该是下面这样吧
a,b,c,d分别代表产生分钟数为1,2,3,4的细菌,1分钟后,4+的还是4+,3的变成了4+,2的变成了3,1的变成了2,4+的又产生同等数量的1,所以就是d(n+1)=d(n)+c(n),c(n+1)=b(n),b(n+1)=a(n),a(n+1)=d(n).至于为什么没有0,我在这里纠结了很久,既然提示是那样就按那样去算吧.
另外不知道为什么要强调用C++而不是C,那我发段C++代码吧.
结果
编程求解问题:有一种细菌,从其产生的第4分钟后,每分钟都产生一个同种细菌。若某初始时刻仅有一个这种细菌,那么此后第n分钟时共有多少种这种细菌?
提示:初始时刻(第t=0分钟),a(0)=1,b(0)=c(0)=d(0)=0,细菌总数为s(0)=a(0)+b(0)+c(0)+d(0)=1。下一时刻d(t+1)=c(t)+d(t),c(t)=b(t),b(t)=a(t),a(t)=d(t)。
拜托了~~
------解决方案--------------------
#include <iostream>
using namespace std;
int GetGermNum(int n){
if(n<=4)
return 0;
int temp=n-4;
int num=0;
while(temp>0){
temp--;//时间消逝一分钟
num++;//产生一个细菌
num+=GetGermNum(temp); //这个细菌在余生里,继续产生细菌
}
return num;
}
int _tmain(int argc, _TCHAR* argv[])
{
cout<<GetGermNum(20)<<endl;
return 0;
}
------解决方案--------------------
虽然我也发现牛角尖了,不过就题论题的话应该是下面这样吧
a,b,c,d分别代表产生分钟数为1,2,3,4的细菌,1分钟后,4+的还是4+,3的变成了4+,2的变成了3,1的变成了2,4+的又产生同等数量的1,所以就是d(n+1)=d(n)+c(n),c(n+1)=b(n),b(n+1)=a(n),a(n+1)=d(n).至于为什么没有0,我在这里纠结了很久,既然提示是那样就按那样去算吧.
另外不知道为什么要强调用C++而不是C,那我发段C++代码吧.
#include <iostream>
using namespace std;
class Bacteria
{
private:
//a,b,c,d依次代表产生时间为1,2,3,4+分钟的细菌
int a,b,c,d;
public:
//经过time分钟时间后a,b,c,d的改变
void Change(int time)
{
a = 1;
b = c = d = 0;
for (int i = 0; i < time; i++)
{
int temp = d;
d = d + c;
c = b;
b = a;
a = temp;
}
}
//获得细菌数
int GetNum(){return (a + b + c + d);}
//测试20分钟内细菌数的变化
void main()
{
for (int i=0; i < 20; i++)
{
Change(i);
cout << "time: " << i << "min num: "
<< GetNum() << endl;
}
}
};
int main()
{
Bacteria bac;
bac.main();
return 0;
}
结果