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

< CSDN周赛解析:第 28 期 >

在这里插入图片描述

CSDN周赛解析:第 27 期

  • 👉 第一题: 小Q的鲜榨柠檬汁
    • > 题目解析
    • > 解决方案
  • 👉 第二题: 三而竭
    • > 解析
    • > 解决方案
    • > 拓展知识
  • 👉 第三题: 隧道逃生
    • > 解析
    • > 解决方案
  • 👉 第四题: 收件邮箱
    • > 解析
    • > 解决方案
  • 往期内容 💨


👉 第一题: 小Q的鲜榨柠檬汁


团建活动是大家所想要的。小Q给大家准备了鲜橙汁。现在有n个朋友买回了k瓶饮料,每瓶有l毫升的饮料,同时还买回了c个柠檬,每个柠檬可以切成d片,p克盐。已知每个朋友需要nl毫升的饮料,一片柠檬,以及np克盐。小Q想知道每个朋友最少可以喝多少杯饮料?
示例:

// 示例
输入	3 4 5 10 8 100 3 1
输出	2

> 题目解析

虽然题目中,变量很多,但是只要理解题目还是很简单能解出来的。

不过题目描述略有一点问题。实际上,是小Q想要知道每个朋友最少可以喝多少杯饮料,其实是要计算每个朋友最多能够喝到多少杯饮料,并且要平均分配,这里实际上是在表达一种期望。否则,如果按照其主观意愿,最少一定可以喝到零杯饮料。

根据题目可以得知,如下数据:

  • 水(原料):k 瓶,l 毫升,每份饮料需要 nl 毫升水。一共可以配置 k*l / nl 份饮料。

  • 柠檬:c 个,每个切 d 片,每份饮料需要 1 片柠檬。一共可以配置 cd/1 份饮料,即 cd 份饮料。

  • 盐:p 克,每份饮料需要 np 克盐。一共可以配置 p/np 份饮料。

实际可以生产的饮料份数为三种材料配出饮料杯数的最小值。

计算出总份数之后,将饮料平均分给所有人饮用,向下取整,即可得到最终答案。

> 解决方案

具体解析均有注释,方便日后查漏补缺!

class Solution {solution(n, k, l, c, d, p, nl, np) {// 根据材料计算出饮料总杯数, 取所有材料的可以制作饮料杯数的最小值,然后在分给每个人,向下取整let drinkNums = Math.min(Math.floor(k * l / nl), Math.floor(c*d), Math.floor(p/np))return Math.floor(drinkNums / n);}
}

👉 第二题: 三而竭


一鼓作气再而衰三而竭。小艺总是喜欢把任务分开做。小艺接到一个任务,任务的总任务量是n。第一天小艺能完成 x 份任务。第二天能完成x/k,第t天能完成x/(k^(t - 1))。小艺想知道自己第一天至少完成多少才能完成最后的任务。

// 示例
输入	59 9
输出	54

> 解析

根据题目可知, 任务总量 是 随着天数逐天递减, 每天减少份数是 xx 也是逐天减少, 且 x = x / k。

题目隐藏的限制是每一天可以做完的任务不会是小数,不然连示例也得不到。

然后可以使用 二分查找 去 循环查找满足要求的值, 且因为要取 “ 至少多少天 ” 这个至少值, 所以需要我们去取 1 ~ n 中 能够满足要求的值。

> 解决方案

具体解析均有注释,方便日后查漏补缺!

class Solution {solution(n, k) {// 编写一个用于校验x值是否满足要求的方法const isSuccessX = (x) => {let local_N = nwhile(x > 0 && local_N > 0) {// 通过循环逐天减少对应天数的工作量,直至x 不符合要求 或 工作被完成local_N -= xx =  Math.floor(x/k)}return local_N <= 0 ? true : false}}let left = 1, right = nwhile(left < right) {let mid = Math.floor((left + right) / 2)/* 记录每次满足要求的x值,越来越往1取值,取最少完成的x值。 通过从最大x的极限值 n 开始,每mid值运算成功一次,那就刷新一次最小值查找的右边界, 再继续在 left ~ right(更新的mid值)中查找下次满足要求的最小值。*/if(isSuccessX(mid)) right = midelse left = mid + 1}return 
}

利用 “ 二分查找 ” 的特性,因为 题目中, x值必定是 1 ~ n中的值, 每次记录满足条件以 right 为界,继续在 left ~right 中查找最小值。

> 拓展知识

< 算法基础 之 二分查找 >


👉 第三题: 隧道逃生


小海豚喜欢打游戏,现在它在操纵游戏人物小C逃脱废弃的隧道,逃生装置在小C的前方 X 米远的位置。但是游戏机只有两个按钮:前进和后退,按前进,小C会前进 m 米,按后退,小C会后退 n 米。小海豚必须设法把小C送到逃生装置上,方能逃离隧道,请你帮帮小海豚,告诉它至少要操作多少次,才能通关。

输入描述:输入三个正整数X、m和n
输出描述:输出一个整数,表示小海豚通关需要操作的次数

// 示例
输入	5 77 157
输出	73

> 解析

用一个变量记录当前角色所在位置。当前位置小于终点位置时,前进;当前位置大于终点位置时,后退。记录操作次数,暴力模拟即可

> 解决方案

具体解析均有注释,方便日后查漏补缺!

class Solution {solution(X, m, n) {let times = 0, currLocal = 0while(currLocal != X) {times++currLocal  += currLocal < X ? m : -n}return times;}
}

👉 第四题: 收件邮箱


已知字符串str表示邮箱的不标准格式。其中”.”会被记录成”dot”,”@”记录成”at”。写一个程序将str转化成可用的邮箱格式。可用格式中,字符串除了开头结尾所有”dot”,都会被转换;”at”只会被转化一次,开头结尾的不转化。

// 示例一
输入	mxyatoxcoderdotcom
输出	mxy@oxcoder.com

> 解析

根据题目可以知道,判断条件如下:

  • at 除了开头结尾不转化, 其他位置均转化且只转化一次。
  • dot 均要转化

我这直接采用正则去匹配修改内容,利用空格作为标识符,trim()通过这个去去除前后对应的标识符。以免干扰后续的匹配。具体逻辑如下

> 解决方案

class Solution {solution(str) {let newStr = str.replace(/at/g, ' at ').trim().replace(/\s(at)\s/, '@').replace(/\s/g, '')newStr = newStr.replace(/dot/g, ' dot ').trim().replace(/\s(dot)\s/g, '.').replace(/\s/g, '')return newStr;}
}

此题较为简单,通过标识直接过。


往期内容 💨

🔥 < elementUi 组件插件: el-table表格拖拽修改列宽及行高 及 使用注意事项 >

🔥 < 每日小技巧:N个很棒的 Vue 开发技巧, 持续记录ing >

🔥 < CSDN周赛解析:第 27 期 >

🔥 < 每日算法 - JavaScript解析:二叉树灯饰【初识动态规划 - dp, 具体理解配合代码看最合适,代码均有注释】 >

http://www.lryc.cn/news/12256.html

相关文章:

  • 【题外话】如何拯救小米11Pro这款工业垃圾
  • Python中有哪些常用操作?这20个你都会吗
  • 【LeetCode】剑指 Offer(4)
  • 庄懂的TA笔记(十二)<>
  • 学分绩点(2023寒假每日一题 5)
  • Framework学习之旅:Zygote进程
  • HTTP基础知识
  • Delphi 10.4.2使用传统代码提示方案(auto complete)(转)
  • 存储类别、链接与内存管理(三)
  • Java:Linux(CentOS)安装、配置及相关命令
  • Linux 操作系统原理 — 多任务优先级调度策略
  • 链表学习之找到两个链表相交的第一个节点
  • 【Kubernetes】【十一】Pod详解 Pod的生命周期
  • Connext DDS录制服务 Recording Service(1)
  • vTESTstudio - VT System CAPL Functions - VT2004(续2)
  • 每天一个linux命令---awk
  • Open3D 点云旋转之轴角式(Python版本)
  • Error: Timeout trying to fetch resolutions from npm
  • Python基础3
  • 高可用集群(HAC)
  • python基于django微信小程序的适老化老人健康预警小程序
  • 基于微信小程序图书馆管理系统
  • 将镭神C32激光雷达的PointXYZ数据转化为PointXYZIR格式 - 附代码
  • 高级前端一面面试题集锦
  • Java基础 -- List集合
  • 【Linux】网络编程 - Socket套接字/基于UDP的网络通信
  • 流程引擎之Camunda简介
  • Mybatis笔记整理
  • 【react全家桶】面向组件编程
  • Django框架之模型视图-使用 PostMan 对请求进行测试