C语言关于微生物增殖(假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次......)引发的思考---解题神器(三点一测法)

C语言 关于微生物增殖(假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次…引发的思考

程序之美

在这里插入图片描述

题目描述

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

输入
没有输入。

输出
两个整数,每个占1行。

有很多朋友拿到这个题目,无从下手,不知道怎么分析,怎么解决问题。这里我就冒充一次长者,带着大家捋顺一下思路。
在解题之前,我们先说下我们的方法,我们的方法叫三点一测法,何为三点一测呢。又是哪三点,哪一测呢。我们详细来讲。
三点一测法精髓:
第一点,提取题目核心点:
第二点,归一化题目分歧点:
第三点,全方位整理解题逻辑点,
一测:及时进行测试,调试,修复逻辑漏洞。

好了,我们就用这个题目开刀,给大伙讲解下具体的实践用法。

提取题目核心点

我们提取题目核心点,本题的核心点,也就是本题能够提供给我们的信息,包括显性的也包括隐形的。从这道题我们可以轻松的看到相关核心点。
比如:
1、生物X每三分钟分裂一次
2、生物Y每两分钟分裂一次
3、新出生X半分钟要吃掉一个Y,之后每一分钟吃掉一个Y。

本题基本上能够提取的信息也就这些。

序号核心点
1生物X每三分钟分裂一次
2生物Y每两分钟分裂一次
3新出生X半分钟要吃掉一个Y,之后每一分钟吃掉一个Y
三分钟
三分钟
两分钟
两分钟
半分钟
一分钟
生物X
生物X
生物X
生物Y
生物Y
生物Y
生物X
生物Y
生物Y

看到这三个信息,我相信很多小伙伴蒙了,丈二的和尚,摸不着脑门,说没联系吧,有联系,唯一的联系就X吃Y,说有联系吧,一会二半分钟吃,一会一分钟吃的。

生物X 生物Y 小Y,我半分钟之后吃你! 小Y,我一分钟之后吃你! 生物X 生物Y

好了,我们核心点就提取到这里,下一步我们开始归一化分歧点。

归一化分歧点

对于以上核心点,小伙伴们很容易就能想到,我们可以定义两种生物X和Y。然后按分钟执行下去就可以了。如下:

Created with Raphaël 2.3.0 开始 输入生物X,Y 相关性操作 有60分钟? 结束 yes no

其中相关性的操作主要有:
X分裂,Y分裂,X新出生半分钟吃掉一个Y,之后一分钟吃掉一个Y

在这里,对于X分裂,Y分裂,小伙伴们都没有悬念,认为直接写就可以了,比如:
三分钟后:X = X * 2;
两分钟后:Y = Y * 2;
主要分歧点就是X吃Y这一点,因为不是X固定时间去吃Y,而是刚出生半分钟吃掉一个Y,之后每一分钟吃掉一个Y。这时有些小伙伴就有些疑虑了,是不是需要去区分生物X是不是新生的,想到这里,可能整个都乱套了,是不是还要记下来每个生物X是不是新生的,吃过一次Y之后就不是新生的了,就可以一分钟吃一个Y了。但是统计每一生物的新生状态也是一笔不小的开销,既耗费脑细胞,也耗费存储资源。
这个时候,也就是我们感觉到问题的复杂性高,解题难度大时,我们可以想想是不是我们的思路错了,记得曾经有一位伟人说过,任何事情都是有一个最合适,最便捷,最合理的解决方案,如果当你觉得你走的路很累,甚至不通的时候,你可以考虑下是不是你的方向走错了,哈哈,这个伟人就是我。
这时我们在发散下思维,世界万物都一样都是有着宏观和微观的运动方式,当我们宏观难以解决时,我们是否考虑用微观的方式解决问题,当然,如果我们微观难以解决问题时,我们也可以考虑用宏观的方式解决问题。
以下是网上找的一个宏观微观的图片,宏观之中包含微观,微观又透漏着宏观的本质和属性。
在这里插入图片描述
从这点出发,我们将操作单位进行扩张,比如之前是一分钟一个操作单位,如果我们将操作单位改为半分钟呢?
这样,六个单位X分裂,4个单位X分裂,X从出生开始一个单位吃掉一个Y,之后每两个单位吃掉一个Y。
这时X吃掉Y的单位分别为:1单位,3单位,5单位,。。。。
看到了正好逢奇数X吃Y。

这时我们很容以的想到X吃Y可以通过判断当前时间单位i,通过i % 2 == 1方式来解决。
这时是不是思路豁然开朗,X生物一个单位吃掉一个Y,之后每逢奇数就吃掉一个Y。

Created with Raphaël 2.3.0 开始 输入生物X,Y i % 2 == 1 X生物吃掉一个Y i%4==0 Y分裂 i%6==0 X分裂 有60分钟? 结束 yes no

至此,是不是小伙伴们已经有了整个逻辑的完整思路了,本来感觉复杂多变,摸不着脑门的问题,经过我们换一个思路,换一种方法,就能用很简单的方法解决掉。

其实所有问题,只要换一个思路,就会有意想不到的效果,解决问题也能变得简单,思路也能变得清晰。
计算机的思路,其实就是由宏观到微观,由微观到宏观的过程,只有具有了这样的大局观,我们遇到问题才能所向披靡,迎刃而解。
其实想想,很多小伙伴们不难理解,计算机就是一个宏观与微观的产物。宏观到其是庞然大物,存储数据量巨大惊人,运算速度更是令人惊叹,百亿次,千亿次的秒级运算量已成为家常之物。微观到,它可以将几千年的历史数据有序的展现,也可以将一张一张的影视图片流式化成电影,可以将细胞分裂,细菌活动等状态一一模拟,展现在人们面前,形成仿真。

遇到问题时只要我们运用计算机的这个有宏观到微观,由微观到宏观的思路,我相信很多问题都可以找到最优解决方案,既省时又省力。

整理解题逻辑点

解题思路:
经过上述流程图,我想信很多小伙伴们已经整理出来了解题逻辑点,对了:
1、输入X生物和Y生物的个数。
2、120个单位,每个单位中,执行如下操作:
逢奇数X吃Y
每四个单位Y分裂
每六个单位X分裂
3,输出最后Y所剩的个数。

在这里插入图片描述

具体实现代码如下:

#include<stdio.h>

int main()
{
    int x=10,y=90;
    
    for(int i=1;i<=120;i++) //将时间的单位往后延顺到120个单位 
    {
        if(i%2==1)//按照题目的条件,正好逢奇数x吃y 
        y=y-x;
        if(i%4==0)//变成4分钟 
        y=y*2;
        if(i%6==0)//变成6分钟 
        x=x*2;
    }
    
    printf("%d",y);
    return 0;
} 

答案:
0
94371840

好了,今天就说到这里吧,有兴趣的小伙伴可以继续探讨,钻研,看有没有更完美的解法,也欢迎小伙伴们和我联系交流,批评指正。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

五一编程

程序之路有我与你同行

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

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

打赏作者

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

抵扣说明:

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

余额充值