2012 蓝桥杯【初赛试题】微生物增殖

题目描述: 假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。 一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。 现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。 如果X=10,Y=90 呢?

本题的要求就是写出这两种初始条件下,60分钟后Y的数目。

思路:一般来说这种题都是找规律的题(在纸上笔算是不可能算出结果的),本体也不例外,只要找到x与y关于时间的对应关系即可。

先看一下前9分钟的情况(以10和90为例)

时间xy原因

0.0 10 90

0.51090

1.0108090-10

1.51080

2.010140(80-10)*2

2.510140

3.020130140-10

3.520120130-10

4.020220(120-10)*2

4.520210220-10

5.020200210-10

5.520190190-10

6.040360(190-10)*2

6.540340360-20

7.040320340-20

7.540300320-20

8.040560(300-20)*2

8.540540560-20

9.080520540-20

总结起来就是

(本表格参考其他博客)备注:第0.5秒时,由于原来给的10个x不是新生,所以这0.5秒x不会吃y

可以看出,每隔3秒,x加倍一次

当秒数是奇数时,对于y,y=y-x;

当秒数是偶数时,对于y,y=(y-x)*2;

要注意的是,,必须分清x,y增值以及x吃y的先后顺序:

首先要进行x吃y的判定,之后才能进行增值,如果先进行增值的话,就会发生错误!

当x=10,y=90时,最后y的结果是:94371840

计算代码:

#include<stdio.h>#include<stdlib.h>int main(){int n,m;double x,y;scanf("%d%lf%lf",&n,&x,&y);m=1;while(m<=n){if(m%2!=0)y=y-x;if(m%2==0)y=(y-x)*2;if(m%3==0)x*=2;//printf("m=%d x=%.0lf y=%.0lf\n",m,x,y);m++;}printf("x=%.0lf y=%.0lf\n",x,y);system("pause");return 0;}

趁着有脾气装潇洒,有本钱耍个性,

2012 蓝桥杯【初赛试题】微生物增殖

相关文章:

你感兴趣的文章:

标签云: