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

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

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

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

相关推荐
MATLAB代码顾问1 小时前
【智能优化】无穷优化算法(INFO)原理与Python实现
开发语言·python·算法
炽烈小老头1 小时前
【每天学习一点算法 2026/05/10】合并K个排序链表
学习·算法·链表
SilentSamsara1 小时前
迭代器协议:`__iter__` / `__next__` 的完整执行流程
开发语言·人工智能·python·算法·机器学习
AI科技星1 小时前
算法联盟ROOT · 全域数学物理卷第20、21、22分册:量子纠缠、隐形场论与时间膨胀
人工智能·算法·数学建模·数据挖掘·机器人
swipe1 小时前
别把 Agent 写成一团 Prompt:用 LangGraph 把多 Agent 系统变成可控状态机
后端·langchain·llm
平凡但不平庸的码农1 小时前
Go Channel详解
开发语言·后端·golang
村上小树1 小时前
非常简单地学习一下shareDB的原理
前端·javascript
认真的薛薛1 小时前
阿里云: A记录 & CNAME
服务器·前端·阿里云
子安柠1 小时前
深入理解 Go 语言文件操作:从基础到最佳实践
开发语言·后端·golang
Achou.Wang1 小时前
go语言中使用等待组(waitgroups)和内存屏障(barriers)进行同步
开发语言·后端·golang