微生物分裂的问题,求各位指点啊
题目:微生物X和Y,X每3分钟分裂一次,Y每2分钟分裂一次,一个新生的X在0.5分钟内会吃掉一个Y,而且每个X每过1分钟会吃掉一个Y。。。
问题:当新生的X=10,Y=89时,求60分钟后X和Y的数量;
当X=10,Y=90时,60分钟后X和Y的数量;
新手上路,求各位指点啊,谢谢
[解决办法]
这个题本身设计有错,没有指出在每2分钟时应该先计算X吃掉的Y还是先计算Y的分裂。
此外,按照题中指定的初始值,等不了多少时间Y就会被吃光了。别说60分钟,就是10分钟后你也不可能再看见半个Y。
#include<iostream>using namespace std;int main(){ int X=10; int Y=90; for (int time=1;time<=60*2;++time) // 循环处理,每次循环代表过去了0.5分钟 { if (time%6==0) X*=2; if (time%4==0) Y*=2; Y-=X; // 每0.5分钟X会吃掉同样数量的Y cout<<((double)time)/2<<"分钟:"<<"X="<<X<<" Y="<<Y<<endl; if (Y<=0) { cout<<"死光了......"<<endl; break; } }}
[解决办法]
将时间扩大2倍后,X6分钟分裂,Y4分钟分裂,新生X在1分钟(6T+1)后吃掉Y,之后2分钟(6T+3,6T+5)吃掉Y。发现在偶数分钟内X和Y分裂,而X也只有在奇数分钟才会吃掉Y。所以不存在先吃掉还是先分裂的情况!
[code=C/C++][/code]
int main(){
long long int x = 10, y;
cout<<"请为Y输入一个值"<<endl;
cin>>y;
int t;
cout<<"请为t输入一个值"<<endl;
cin>>t;
long long int m,n;
m=0; n=x;
for (int i = 1; i <= 2*t; i++)
{
if(i%4 == 0)
{y = 2 * y;}
if(i%6 == 0)
{n=2*m;m=0;}
if(i%6 == 1)
{y=y-n;m=m+n;n=0;}
if(i%6 == 3)
{y=y-m;}
if(i%6 == 5)
{y=y-m;}
cout<<i/2<<"分钟后: "<<y<<endl;
}
system("pause");
}