河南城乡住房和建设厅网站,开发公司装饰装修合同范本简单,网站 优化 教程,购物网站排行榜CSDN周赛解析#xff1a;第 27 期#x1f449; 第一题#xff1a; 小Q的鲜榨柠檬汁 题目解析 解决方案#x1f449; 第二题#xff1a; 三而竭 解析 解决方案 拓展知识#x1f449; 第三题#xff1a; 隧道逃生 解析 解决方案#x1f449;… 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解析
根据题目可知 任务总量 是 随着天数逐天递减 每天减少份数是 x x 也是逐天减少 且 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) {timescurrLocal currLocal X ? m : -n}return times;}
}第四题 收件邮箱 已知字符串str表示邮箱的不标准格式。其中”.”会被记录成”dot”””记录成”at”。写一个程序将str转化成可用的邮箱格式。可用格式中字符串除了开头结尾所有”dot”都会被转换”at”只会被转化一次开头结尾的不转化。
// 示例一
输入 mxyatoxcoderdotcom
输出 mxyoxcoder.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 具体理解配合代码看最合适代码均有注释】