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

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

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

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

相关推荐
JarvanMo1 分钟前
理解 Flutter 中的 runApp() 与异步初始化
前端
掘金安东尼1 分钟前
🧭 前端周刊第442期(24–30 Nov 2025)
前端
h***8563 分钟前
Rust在Web中的前端开发
开发语言·前端·rust
开心猴爷3 分钟前
Mac 抓包软件怎么选?HTTPS 调试、TCP 流量分析与多工具协同的完整实践指南
后端
小O的算法实验室4 分钟前
2025年CMAME SCI2区,基于优先级驱动搜索、具备动态候选解管理策略的粒子群算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
深色風信子6 分钟前
Vue 富文本编辑器
前端·javascript·vue.js·wangeditor·vue 富文本·wangeditor-text·前端富文本
xiaobangsky7 分钟前
前端安全防护指南(三)反射型XSS
前端·安全·xss
吃着火锅x唱着歌7 分钟前
LeetCode 2874.有序三元组中的最大值II
数据结构·算法·leetcode
咖啡の猫9 分钟前
Python顺序结构
java·前端·python
xxxxxmy18 分钟前
相向双指针—三数之和
python·算法·相向双指针