今日算法:蓝桥杯基础题之“微生物增殖”

你好,我是沐爸,欢迎点赞、收藏和关注。个人知乎

今日算法第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的数目。

提示:

分析可知,Y分别会在0.5,1.5,2.5······时被吃,所以,把60分钟分成120份,则在除以2余数为1时,Y的数目减少X个

javascript 复制代码
let X = 10, Y = 90;
for (let i = 1; i <= 120; i++) {
    // 请将此处补充完整
}
console.log(Y);

试题图解

根据迭代和对应的时间,看看 X 和 Y 是怎么变化的。

迭代序号 时间(分钟) X Y
1 0.5 10 79=89-10
2 1 10 79
3 1.5 10 69=79-10
4 2 10 138=69*2
5 2.5 10 128=138-10
6 3 20=10*2 128
7 3.5 20 108=128-20
8 4 20 216=108*2
9 4.5 20 196=216-20
10 5 20 196
11 5.5 20 176=196 - 20
12 6 40=20*2 352=176*2

从上图可看出规律:

  • 1,3,5,7,9,11 当为奇数时,即每隔一分钟,Y 的数量需要减去 X。
  • 4,8 如果是4的倍数,即每隔2分钟,Y 的数量都会翻倍
  • 6 如果是6的倍数,即每隔3分钟,X 的数量都会翻倍
  • 12,是4和6的公倍数,此时X和Y的数量都会翻倍
  • 其余时间,两者的数量都不变

知道了变化规律,是不是就简单了,将上面的试题补充完整,结果就是:

javascript 复制代码
let X = 10, Y = 90;
for (let i = 1; i <= 120; i++) {
    if (i % 2 === 1) {
        Y -= X;
    }
    if (i % 4 === 0) {
        Y *= 2;
    }
    if (i % 6 === 0) {
        X *= 2;
    }
}
console.log(Y); // 94371840

如果 Y 的初始值为89,结果是 -979369984,所以,控制不好 X 和 Y的数量,养殖的时候,Y可能早就被吃完了。

好了,分享结束,谢谢点赞,下期再见。

相关推荐
Victor3561 天前
MongoDB(31)索引对查询性能有何影响?
后端
Victor3561 天前
MongoDB(30)如何删除索引?
后端
lizhongxuan1 天前
多 Agent 协同机制对比
后端
IT_陈寒1 天前
SpringBoot项目启动慢?5个技巧让你的应用秒级响应!
前端·人工智能·后端
树上有只程序猿1 天前
2026低代码选型指南,主流低代码开发平台排名出炉
前端·后端
橙某人1 天前
LogicFlow 小地图性能优化:从「实时克隆」到「占位缩略块」!🚀
前端·javascript·vue.js
高端章鱼哥1 天前
为什么说用OpenClaw对打工人来说“不划算”
前端·后端
大脸怪1 天前
告别 F12!前端开发者必备:一键管理 localStorage / Cookie / SessionStorage 神器
前端·后端·浏览器
用户8356290780511 天前
使用 C# 在 Excel 中创建数据透视表
后端·python
Mr_Mao1 天前
我受够了混乱的 API 代码,所以我写了个框架
前端·api