csdn博客-微生物增值

微生物增值

问题描述

假设有两种微生物 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.01090
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
可以看出
  • 每隔3秒,x加倍一次
  • 当秒数是奇数时,对于y,y=y-x;
  • 当秒数是偶数时,对于y,y=(y-x)*2;

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

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

而在第0.5秒,由于原来给的10个x不是新生,所以这0.5秒x不会吃y

代码

#include <stdio.h>
#include <stdlib.h>

double x;
double y;
int n;

int add(int m)
{
    //用户输入时间n以及xy初始值
    scanf("%d%lf%lf",&n,&x,&y);
    m = 1;
    while (m <= n)
    {
        if (m % 2 != 0)//奇
        y -= x;
        if (m % 2 == 0) //偶
        y = (y - x) * 2;
        if (m % 3 == 0)//分裂
        x *= 2;
        m ++;
    }
    
    return y;
}

int main()
{
    y = add(n);
    printf("%.01f\n",y);

    system("pause");//任意键继续 便观察
    return 0;
}

总结

  • system(“pause”);任意键继续 便观察

  • 找清楚规律形成逻辑再进行编译

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值