当前位置: 首页 > article >正文

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

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

今日算法第三题,如何进行微生物养殖,一起看看吧。

题目

假设有两种微生物 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个

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

试题图解

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

迭代序号时间(秒)XY
10.51079=89-10
211079
31.51069=79-10
4210138=69*2
52.510128=138-10
6320=10*2128
73.520108=128-20
8420216=108*2
94.520196=216-20
10520196
115.520176=196 - 20
12640=20*2352=176*2

从上图可看出规律:

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

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

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可能早就被吃完了。

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


http://www.kler.cn/a/282514.html

相关文章:

  • 如何编译 Cesium 源码
  • 【机器学习导引】ch6-支持向量机
  • PyAEDT:Ansys Electronics Desktop API 简介
  • RabbitMQ实战启程:从原理到部署的全方位探索(上)
  • 单片机智能家居火灾环境安全检测
  • 如何保证MySQL与Redis缓存的数据一致性?
  • 网络安全面试经验80篇
  • C#命名空间(Namespace)
  • 如何本地搭建 Whisper 语音识别模型?一文解决
  • Vulkan入门系列16 - 生成多级纹理贴图( Mipmaps)
  • Git之1.6版本重要特性及用法实例(五十四)
  • 请你学习:前端布局3 - flex
  • 实训day36(8.26)
  • 概率论与高等数学、线性代数的联系及应用
  • 虚幻5|技能栏优化(1)---优化技能UI,并添加多个技能
  • 问:JAVA接口和抽象类有哪些差异?
  • 四十五、【人工智能】【机器学习】- Robust Regression(稳健回归)
  • 骁龙CPU简介
  • 扩展——双向搜索
  • vagrant 创建虚拟机
  • 【PGCCC】内存表的并发魔法:探秘PostgreSQL的内存表并发控制原理与实现
  • 嵌入式知识点
  • 计算机毕业设计选题推荐-医院门诊预约-医院预约挂号微信小程序/安卓APP-项目实战
  • CTFHub SSRF靶场通关攻略(6-11)
  • LabVIEW如何适应航天系统的要求
  • Java 泛型与增强for