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.510 80 
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;
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光仔December

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值