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

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

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

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

相关推荐
靴子学长1 天前
Decoder only 架构下 - KV cache 的理解
pytorch·深度学习·算法·大模型·kv
吴声子夜歌1 天前
TypeScript——泛型
前端·git·typescript
azhou的代码园1 天前
基于SpringBoot+微信小程序的图片识别科普系统
spring boot·后端·微信小程序
寒秋花开曾相惜1 天前
(学习笔记)3.8 指针运算(3.8.3 嵌套的数组& 3.8.4 定长数组)
java·开发语言·笔记·学习·算法
Гений.大天才1 天前
2026年计算机领域的年度主题与范式转移
算法
kgduu1 天前
js之客户端存储
javascript·数据库·oracle
Tony Bai1 天前
Rust 看了流泪,AI 看了沉默:扒开 Go 泛型最让你抓狂的“残疾”类型推断
开发语言·人工智能·后端·golang·rust
四千岁1 天前
2026 最新版:WSL + Ubuntu 全栈开发环境,一篇搞定!
javascript·node.js
njidf1 天前
C++与Qt图形开发
开发语言·c++·算法
ZoeJoy81 天前
算法筑基(一):排序算法——从冒泡到快排,一文掌握最经典的排序算法
数据结构·算法·排序算法