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

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

今日算法第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可能早就被吃完了。

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

相关推荐
sali-tec4 小时前
C# 基于OpenCv的视觉工作流-章66-直线夹角
图像处理·人工智能·opencv·算法·计算机视觉
AC赳赳老秦4 小时前
接口测试自动化:用 OpenClaw 对接 Postman,实现批量回归测试、测试报告自动生成与推送
java·人工智能·python·算法·elasticsearch·deepseek·openclaw
浮游本尊4 小时前
服务请求附件:从上传到预览、下载的实现详解
后端
前端Hardy4 小时前
pnpm 11.0 正式登场:安装起飞、安全拉满、彻底告别 npm 依赖
前端
PILIPALAPENG4 小时前
第4周 Day 1:智能体记忆系统——给 Agent 一个"大脑"
前端·人工智能·python
程序员辉哥4 小时前
从零构建Agent智能体系列01-从零理解智能体
后端·openai·ai编程
_风满楼4 小时前
TDD实战-会议室冲突检测的红绿重构循环
前端·javascript·算法
Rkgua4 小时前
JS中的惰性函数基本介绍
前端·javascript
客场消音器5 小时前
我用两周半 Vibe Coding 做了一个前额叶训练的微信小程序
前端·javascript·后端
pq2175 小时前
java实现遗传算法
算法