0
点赞
收藏
分享

微信扫一扫

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为例)

时间

x

y

原因

0.0       

10          

90       

 

0.5

10

90

 

1.0

10

80

90-10

1.5

10

80

 

2.0

10

140

(80-10)*2

2.5

10

140

 

3.0

20

130

140-10

3.5

20

120

130-10

4.0

20

220

(120-10)*2

4.5

20

210

220-10

5.0

20

200

210-10

5.5

20

190

190-10

6.0

40

360

(190-10)*2

6.5

40

340

360-20

7.0

40

320

340-20

7.5

40

300

320-20

8.0

40

560

(300-20)*2

8.5

40

540

560-20

9.0

80

520

540-20

总结起来就是

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

(本表格参考其他博客)
备注:第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;
}

举报

相关推荐

0 条评论