< CSDN周赛解析:第 28 期 >

news2024/9/23 9:31:17

在这里插入图片描述

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 = n
			while(x > 0 && local_N > 0) {
				// 通过循环逐天减少对应天数的工作量,直至x 不符合要求 或 工作被完成
				local_N -= x
				x =  Math.floor(x/k)
			}
			return local_N <= 0 ? true : false
		}
	}
	
	let left = 1, right = n
	
	while(left < right) {
		let mid = Math.floor((left + right) / 2)
		/* 
			记录每次满足要求的x值,越来越往1取值,取最少完成的x值。 
			通过从最大x的极限值 n 开始,每mid值运算成功一次,那就刷新一次最小值查找的右边界, 再继续在 left ~ right(更新的mid值)中查找下次满足要求的最小值。
		*/
		if(isSuccessX(mid)) right = mid
		else 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 = 0
		while(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.coloradmin.cn/o/357087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【人工智能AI】四、NoSQL进阶《NoSQL 企业级基础入门与进阶实战》

帮我写一篇介绍NoSQL的技术文章&#xff0c;文章的标题是《四、NoSQL进阶》&#xff0c;不少于3000字。帮我细化到三级目录&#xff0c;使用markdown格式。这篇文章的目录是&#xff1a; 四、NoSQL 进阶 4.1 NoSQL 高可用 4.2 NoSQL 数据安全 4.3 NoSQL 性能优化 4.4 总结 四、…

Vue:extends继承组件复用性

提到extends继承&#xff0c;最先想到的可能是ES6中的class、TS中的interface、面向对象编程语言中中的类和接口概念等等&#xff0c;但是我们今天的关注点在于&#xff1a;如何在Vue中使用extends继承特性。 目录 Vue&#xff1a;创建Vue实例的方式 构造函数方式&#xff1…

3D点云处理:点云聚类--FEC: Fast Euclidean Clustering for Point Cloud Segmentation

文章目录 聚类结果一、论文内容1.1 Ground Surface Removal1.2 Fast Euclidean Clustering题外:欧几里得聚类Fast Euclidean Clustering二、参考聚类结果 原始代码中采用的是pcl中的搜索方式,替换为另外第三方库,速度得到进一步提升。 一、论文内容 论文中给出的结论:该…

java基础学习 day42(继承中构造方法的访问特点,this、super的使用总结)

继承中&#xff0c;构造方法的访问特点 父类的构造方法不会被子类继承&#xff0c;但可以通过super()调用父类的构造方法&#xff0c;且只能在子类调用&#xff0c;在测试类中是不能手动单写构造方法的。子类中所有的构造方法默认先调用父类的无参构造&#xff0c;再执行自己构…

vue3+ts+node个人博客系统(三)

一.主页顶部和中心面板布局 &#xff08;1&#xff09; 首先先去element-plus选择合适的布局el-container (2)在头部处编写相应的菜单栏el-menu,在这里要注意动态绑定路由的问题:default-active"$route.path"。将default-active设置为$route.path&#xff0c;el-me…

Java File类、IO流、Properties属性类

文章目录一、补充二、File类File类的含义创建多级文件File类的常见方法三、IO流IO流分类输入输出流FileOutputStreamInputStreamInputStream与OutputStream的实例ReaderWriterFileReader和FileWriter的实例缓冲流转换流序列化与ObjectInputStream、ObjectOutputStream打印流Pro…

MySQL 10:MySQL事务

MySQL 中的事务是由存储引擎实现的。在 MySQL 中&#xff0c;只有 InnoDB 存储引擎支持事务。事务处理可用于维护数据库的完整性&#xff0c;确保批处理的 SQL 语句要么执行要么根本不执行。事务用于管理 DDL、DML 和 DCL 操作&#xff0c;例如插入、更新和删除语句&#xff0c…

JVM10垃圾回收算法

1.什么是垃圾&#xff1f; 垃圾是指在运行程序中没有任何指针指向的对象&#xff0c;这个对象就是需要被回收的垃圾。 如果不及时对内存中的垃圾进行清理&#xff0c;那么&#xff0c;这些垃圾对象所占的内存空间会一直保留到应用程序的结束&#xff0c;被保留的空间无法被其…

XLink 和 XPointer 简介

XLink 定义了一套标准的在 XML 文档中创建超级链接的方法。 XPointer 使超级链接可以指向 XML 文档中更多具体的部分&#xff08;片断&#xff09;。 您应当具备的基础知识 学习本教程前您应当具备的基础知识: HTML / XHTMLXML / XML 命名空间XPath 如果您希望首先学习这些项…

.NET7的AOT的使用

背景其实&#xff0c;规划这篇文章有一段时间了&#xff0c;但是比较懒&#xff0c;所以一直拖着没写。最近时总更新太快了&#xff0c;太卷了&#xff0c;所以借着 .NET 7 正式版发布&#xff0c;熬夜写完这篇文章&#xff0c;希望能够追上时总的一点距离。本文主要介绍如何在…

九龙证券|重大利好!期货公司打新再“解绑”:可直接参与首发网下配售!

时隔近7年&#xff0c;期货公司及其财物办理子公司参加首发证券网下询价和配售事务再次“解绑”。 2月17日&#xff0c;为适应全面实行股票发行注册制变革需求&#xff0c;中国证券业协会&#xff08;以下简称中证协&#xff09;发布《初次公开发行证券网下出资者办理规矩》&am…

NO.1嵌入式入门笔记:常用命令记录

一、前言 Linux文件目录&#xff1a; Linux Shell&#xff1a; 它负责接收用户的输入&#xff0c;根据用户的输入找到其它程序并运行。比如我们输入“ls”并回车时&#xff0c;shell 程序找到“ls”程序并运行&#xff0c;把结果打印出来。Shell有多种实现&#xff0c;我们常用…

Linux常用命令之find命令详解

简介 find命令主要用于&#xff1a;用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。 如果使用该命令时&#xff0c;不设置任何参数&#xff0c;则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。 是我们在…

在Linux和Windows上安装seata-1.6.0

记录&#xff1a;381场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;安装seata-1.6.0。在Windows上操作系统上&#xff0c;安装seata-1.6.0。Seata&#xff0c;一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。版本&#xff1a;JDK…

【java基础】Java常用类———包装类

包装类 wrapper 装箱与拆箱 装箱&#xff1a;基本类型->包装类&#xff1b; 拆箱&#xff1a; 包装类->基本类型 public class Integer01 {public static void main(String[] args) {//演示int <--> Integer 的装箱和拆箱//jdk5前是手动装箱和拆箱//手动装箱 in…

学海记录项目测试报告

⭐️前言⭐️ 本篇文章是博主基于学海记录的个人项目所做的测试报告&#xff0c;用于总结运用自动化测试技术&#xff0c;应用于自己的项目。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主将持续更新学习记录…

【查找算法】解析学习四大常用的计算机查找算法 | C++

第二十二章 四大查找算法 目录 第二十二章 四大查找算法 ●前言 ●查找算法 ●一、顺序查找法 1.什么是顺序查找法&#xff1f; 2.案例实现 ●二、二分查找法 1.什么是二分查找法&#xff1f; 2.案例实现 ●三、插值查找法 1.什么是插值查找法&#xff1f; 2…

数据结构:基数排序

基数排序(radix sorting) 实现排序主要是通过关键字之间的比较和移动记录这两种操作来完成的,而实现基数排序不需要进行关键字间的比较,而是利用“分配”和“收集”两种基本操作。 例如,我们可以用分配和收集的方法来对扑克牌进行“排序” 已知扑克牌中 52 张牌面的次序关系为…

Time-distributed 的理解

前言 今天看到论文中用到 Time-distributed CNN&#xff0c;第一次见到 Time-distributed&#xff0c;不理解是什么含义&#xff0c;看到代码实现也很懵。不管什么网络结构&#xff0c;外面都能套一个TimeDistributed。看了几个博客&#xff0c;还是不明白&#xff0c;问了问C…