蓝桥杯 第三届01

题目描述:

假设有两种微生物 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=10 y=90分析

一开始的10个x是刚出生的,所以它们在半分钟之后就要吃y,所以0.5分钟的时候,y的数量减少,注意:下一次吃y的时候是1分钟之后;

在1分钟的时候,x不分裂,y也不分裂,并且x并不会吃y;

在1.5分钟的时候,每个x吃掉一个y;

在2分钟的时候,x加倍,此时x并不吃掉y;

在2.5分钟的时候,每个x吃掉一个y;

在3分钟的时候,x加倍,此时x并不吃掉y;

在3.5分钟的时候,每个x吃掉一个y(此时的20个x中,10个是新生的x,因为距离出生过了0.5分钟,所以吃掉一个y;还有10个是老的x,因为距离上次吃y已经过了1分钟,所以再吃掉一个y);

在4分钟的时候,y加倍,x并不吃y;

在4.5分钟的时候,每个x吃掉一个y(因为此时的20个x都是老的x了);

在5分钟的时候,x不变,y也不变;

在5.5分钟的时候,每个x吃掉一个y;

在6分钟的时候,x加倍,y加倍,此时x并不会吃掉y;

……

通过以上,我们可以得出x和y的数量变化的规律:

x并不会死亡,数量随着时间呈指数增长;

y自身会随着时间的增加而增加,但是其数量还受到x的限制;

我们还可发现,x在时间为2的倍数的时候加倍,y在时间是3的倍数的时候加倍,而x吃掉y是在每个半分钟的时候发生的,所以当x吃y的时候,x不会加倍,y也不会加倍。

因此,可以把以上三个时间看成是相互独立的。

时间x的数量y的数量备注
0.01090 
0.5108080=90-10
1.01080 
1.5107070=80-10
2.010140140=70*2
2.510140130=140-10
3.020130 
3.520110110=130-20
4.020220220=110*2
4.520200200=220-20
5.020200 
5.520180180=200-20
6.040360 
6.540320320=360-40
7.040320 
7.540280280=320-40
8.040560560=280*2
8.540520520=560-40
9.080520 
由上面的规律得到程序代码:
#include <iostream>

using namespace std;
int  jieguo(int x,int y,int m)
{
    for(int i=1;i<=m;i++)
    {
        if(i%2==1)
        {
            y-=x;
        }
        if(i%4==0)
        {
            y=y*2;
        }
        if(i%6==0)
        {
            x=x*2;
        }
        
    }
    return 0;
}
int main()
{
    int i;
    jieguo(10,90,120);
    jieguo(10,89,120);
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值