热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

<CSDN周赛解析:第27期>

CSDN周赛解析:第27期👉前言👉第一题:幸运数字解析解决方案拓展知识👉第二题:投篮

在这里插入图片描述


CSDN周赛解析:第 27 期


  • 👉 前言
  • 👉 第一题: 幸运数字
    • > 解析
    • > 解决方案
    • > 拓展知识

  • 👉 第二题: 投篮
    • > 解析
    • > 解决方案

  • 👉 第三题: 通货膨胀-x国货币
    • > 解析
    • > 解决方案

  • 👉 第四题: 最后一位
    • > 解析
    • > 解决方案

  • 往期内容 💨




👉 前言

各位卷王们好! 基于最近比较经常接触算法相关的编程题,所以于前天,也就是CSDN第27期周赛。报名参加了,为了记录一下自己在哪里跌倒,特此打算新开一个栏目,名为: CSDN周赛解析

希望大伙不要吝啬,三连支持一下呀!

👉 第一题: 幸运数字

小艺定义一个幸运数字的标准包含3条:

  1. 仅包含4或7。
  2. 幸运数字的前半部分数字之和等于后半部分数字之和。
  3. 数字的长度是偶数。

> 解析

根据题目可以得出,幸运数字有三条规则判定,本题较为简单,配合解决方案更好理解!

> 解决方案

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

class Solution {
solution(n) {
// 通过将数字转换成数值数组,方便利用数组自带的函数
var arr = String(n).split('').map(item => Number(item))
// TODO: 请在此编写代码
/*
判断1:通过取余的方式,判断是否为偶数
判断2:通过数组函数filter会返回符合逻辑语句的数组,判断前后的长度是否相同来判断,是否符合幸运数字均为4 或 7 的判断
*/

if(arr.length%2 != 0 || arr.filter(item => (item == 4 || item == 7)).length !== arr.length) {
return 'No'
}
/*
通过数组函数slice(indexStrat, indexEnd), 截出一个新的数组(需要注意,slice()和splice()的区别),将幸运数字分割成前后两部分,进行累加对比

*/

if(arr.slice(0,(arr.length/2)).reduce((prev, curr) => prev + curr) != arr.slice(arr.length/2, arr.length).reduce((prev, curr) => prev + curr)) {
return 'No'
}
return 'YES'
}
}
var str_0 = readline().trim();
var n = parseInt(str_0);
let sol = new Solution();
result = sol.solution(n);
print(result);

在比赛时,这道题是存在bug的,bug是返回Yes时字母是全部大写的,而No只有首字母是大写的。当时不够细心,没测出来,以为是编码问题。可惜了,只拿到6分。

> 拓展知识

在使用slice()splice()时,需要注意二者的区别,虽然它们都是对于数组对象进行截取,但是二者还是存在明显区别。具体如下:

  • 函数参数上slicesplice第一个参数都是截取开始位置, slice第二个参数是截取的结束位置(不包含), 而splice第二个参数(表示这个从开始位置截取的长度)。
  • slice 不会对原数组产生变化, 而 splice 会直接剔除原数组中的截取数据 ! splice 更多被用于对原数组的增删改

👉 Array.prototype.splice() 详细

👉 Array.prototype.slice() 详细

👉 < Javascript中数据处理小技巧 — 数组篇 >

👉 第二题: 投篮

小明投篮,罚球线投球可得1分,在三分线内投篮得分可以得到2分,在三分线以外的地方投篮得分可以得到3分,连续投进得分累计,一旦有一个球没投进则得分清零,重新计算。

现给出所有得分记录(清零不计入得分),请你计算一下小明最多连续投进多少个球?

> 解析

根据题目可以得出,投篮得分总共有三种得分方式,分别是: 罚球线 + 1、三分线内 + 2、三分线外 + 3。

那么我们可以通过让当前分数,分别 + 1,+2, +3后,和下一个得分总和相比。如果相等,证明是成功进球了的。

> 解决方案

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

class Solution {
solution(n, arr) {
/*
result 用于记录最多连续进球数
curr 用于记录当前最多连续进球数
因为是记录得分了,只要记录得分的arr数组长度不等于0,初始值就为1。
*/

const INITVAL = arr.length !== 0 ? 1 : 0
var result = INITVAL
var curr = INITVAL
// 循环投球次数,将得分数组按照进球得分的三种分类,逐个比对。
// 只要有一个相等则为进球,否则重置当前连续进球数
for(let times &#61; 0; times < n; times&#43;&#43; ) {
// 比较当前连续进球数和全局最高连续进球数
result &#61; Math.max(result, curr)
if(arr[times]&#43;1 &#61;&#61; arr[times&#43;1] || arr[times]&#43;2 &#61;&#61; arr[times&#43;1] || arr[times]&#43;3 &#61;&#61; arr[times&#43;1])
{
curr&#43;&#43;
} else {
curr &#61; INITVAL
}
}
// TODO: 请在此编写代码
return result;
}
}
var str_0 &#61; readline().trim();
var n &#61; parseInt(str_0);
var str_1 &#61; readline();
var line_list_1 &#61; str_1.trim().split(" ");
var arr &#61; new Array();
for(var i &#61; 0; i < line_list_1.length; i&#43;&#43;){
arr[i] &#61; parseInt(line_list_1[i]);
}
let sol &#61; new Solution();
result &#61; sol.solution(n, arr);
print(result);

&#x1f449; 第三题&#xff1a; 通货膨胀-x国货币

X国发行货币最高面额为n。 次高面额为n的因子。
以此类推&#xff0c;X国最多发行多少种货币。

> 解析

根据题目可以得出&#xff0c;这题是考我们对因子概念。

在数学中&#xff0c;如果整数A除B&#xff0c;得出结果是没有余数的整数&#xff0c;就称B是A的因子。

比如8的因子有1&#xff0c;2&#xff0c;4和8。

根据题目分析&#xff0c;说是次高面额为n的因子&#xff0c;然后以此类推。 那么这里的n是会变化的&#xff0c;在取到因子后&#xff0c;需要更新n为当前面额数为n。例子如下&#xff1a;

最高面额为10的货币&#xff0c;第一个因子为5&#xff0c; 而5的因子&#xff0c;只有1和它本身&#xff0c;但货币种类不能重复&#xff0c;故只有三种&#xff0c;分别为 10块&#xff0c;5块&#xff0c;1块。

> 解决方案

具体解析均有注释&#xff0c;方便日后查漏补缺&#xff01;

class Solution {
solution(n) {
var result &#61; 0;
// 定义当前的最高面额值为n
let curr &#61; n
for(let num &#61; n; num >&#61; 1; num--) {
// 通过取余的方法判断是否为因子
if(curr%num &#61;&#61; 0) {
curr &#61; num
result&#43;&#43;
}
}
// TODO: 请在此编写代码
return result;
}
}
var str_0 &#61; readline().trim();
var n &#61; parseInt(str_0);
let sol &#61; new Solution();
result &#61; sol.solution(n);
print(result);

&#x1f449; 第四题&#xff1a; 最后一位

小明选择了一个正整数X,然后把它写在黑板上。然后每一天他会擦掉当前数字的最后一位,直到他擦掉所有数位。

在整个过程中,小明会把所有在黑板上出现过的数字记录下来,然后求出他们的总和sum。

例如X &#61; 509, 在黑板上出现过的数字依次是509, 50, 5, 他们的和就是564.

小明现在给出一个sum,小明想让你求出一个正整数X经过上述过程的结果sum.

> 解析

根据题目可以得出&#xff0c;最后的和&#xff0c;是根据逐位擦除的数相加&#xff0c;那么这个数必然小于sum。由此&#xff0c;我们可以通过循环这个sum值&#xff0c;将值根据逐位除于10相加&#xff0c;判断是否等于sum&#xff0c;以此来判断是否符合条件。

> 解决方案

具体解析均有注释&#xff0c;方便日后查漏补缺&#xff01;

class Solution {
solution(X) {
var result &#61; 0;
// TODO: 请在此编写代码
while (X > 0) {
result &#43;&#61; X;
X /&#61; 10;
}
return result;
}
}
var str_0 &#61; readline().trim();
var sum &#61; parseInt(str_0);
let sol &#61; new Solution();
result &#61; sol.solution(sum);
print(result);

不难看出&#xff0c;一个数的sum一定比这个数本身大&#xff0c;所以结果就在0到sum之间。

测试数据比较水&#xff0c;直接使用暴力模拟法&#xff0c;即可通过此题。



往期内容 &#x1f4a8;

&#x1f525; &#xff1c; 每日算法 - Javascript解析&#xff1a;二叉树灯饰【初识动态规划 - dp&#xff0c; 具体理解配合代码看最合适&#xff0c;代码均有注释】 &#xff1e;

&#x1f525; &#xff1c; 每日算法 - Javascript解析&#xff1a;经典弹珠游戏 &#xff1e;

&#x1f525; &#xff1c; 每日算法 - Javascript解析&#xff1a;从尾到头打印链表 &#xff1e;

&#x1f525; &#xff1c; Javascript技术分享&#xff1a; 大文件切片上传 及 断点续传思路 &#xff1e;






推荐阅读
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 判断数组是否全为0_连续子数组的最大和的解题思路及代码方法一_动态规划
    本文介绍了判断数组是否全为0以及求解连续子数组的最大和的解题思路及代码方法一,即动态规划。通过动态规划的方法,可以找出连续子数组的最大和,具体思路是尽量选择正数的部分,遇到负数则不选择进去,遇到正数则保留并继续考察。本文给出了状态定义和状态转移方程,并提供了具体的代码实现。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
  • 本文介绍了一个Python函数same_set,用于判断两个相等长度的数组是否包含相同的元素。函数会忽略元素的顺序和重复次数,如果两个数组包含相同的元素,则返回1,否则返回0。文章还提供了函数的具体实现代码和样例输入输出。 ... [详细]
  • 抽空写了一个ICON图标的转换程序
    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
author-avatar
禁灭19
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有