微生物增殖|2012年蓝桥杯B组题解析第一题-fishers
-
(3')微生物增殖
假设有两种微生物 X 和 Y
X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。
一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。
现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。
如果X=10,Y=90 呢?本题的要求就是写出这两种初始条件下,60分钟后Y的数目。
题目的结果令你震惊吗?这不是简单的数字游戏!真实的生物圈有着同样脆弱的性质!也许因为你消灭的那只 Y 就是最终导致 Y 种群灭绝的最后一根稻草!
答案:0 和 94371840
思路:模拟分裂过程,以半分钟为一个单位。
1 Y-=X(新出生的X) 3 Y-=X(X隔了一分钟) 5 Y-=X(X隔一分钟) 7 Y-=X(新出生的+隔了一分钟)
2 4 Y=2 (Y翻倍) 6 X=3 (X翻倍) 8 Y*=2(Y翻倍)
通过上面的数字模拟。很显然我们得到了规律即:(假设t=1,t<=120)当t%20时(Y-=x);当t%40时 (Y=2); 当t%6==0时(X=2)
代码:
#include<iostream>
using namespace std;
int main()
{
int t;
int x=10;
int y=90;
// int y=89;
for(t=1;t<=120;t++)
{
if(t%2==1)y-=x;
if(t%6==0)x*=2;
if(t%4==0)y*=2;
}
if(y<0)y=0;
cout<<y<<endl;
return 0;
}