华为OD机试真题 Java 实现【玩牌高手】【2023 B卷 100分】,附详细解题思路

在这里插入图片描述

一、题目描述

给定一个长度为n的整型数组,表示一个选手在n轮内可选择的牌面分数。选手基于规则选牌,

请计算所有轮结束后其可以获得的最高总分数。

选择规则如下:

  1. 在每轮里选手可以选择获取该轮牌面,则其总分数加上该轮牌面分数,为其新的总分数;
  2. 选手也可不选择本轮牌面直接跳到下一轮,此时将当前总分数还原为3轮前的总分数,若当前轮次小于等于3(即在第1、2、3轮选择跳过轮次),则总分数置为0;
  3. 选手的初始总分数为0,且必须依次参加每一轮。

二、输入描述

第一行为一个小写逗号分割的字符串,表示n轮的牌面分数,1<= n <=20。

分数值为整数,-100 <= 分数值 <= 100。

不考虑格式问题。

三、输出描述

所有轮结束后选手获得的最高总分数。

四、解题思路

题目要求计算选手在每一轮选择牌面后能获得的最高总分数。选手可以选择获取当前轮的牌面分数,也可以选择跳过当前轮。

具体规则如下:

  1. 如果选手选择获取当前轮的牌面分数,则将当前轮的牌面分数加到总分数上,成为新的总分数;
  2. 如果选手选择跳过当前轮,则将当前总分数还原为3轮前的总分数(即上上轮的总分数),如果当前轮次小于等于3,则总分数置为0;
  3. 选手的初始总分数为0,且必须依次参加每一轮。

根据题目描述,我们可以使用动态规划的思想来解决问题。

具体步骤如下:

  1. 读取输入的牌面分数字符串,使用逗号分割得到每一轮的牌面分数数组;
  2. 创建一个整型数组 arr,将牌面分数依次存储到数组中;
  3. 创建一个整型列表 list,用于存储每一轮结束后选手获得的最高总分数。初始化列表的第一个元素为初始总分数,即 list[0] = arr[0](如果第一轮的牌面分数小于等于0,则初始总分数为0);
  4. 使用循环从第二轮开始计算每一轮结束后选手获得的最高总分数,从 i = 1 开始迭代到 i = n-1:
    • 计算当前轮结束后的总分数 count = list[i-1] + arr[i],即当前轮的总分数为上一轮的总分数加上当前轮的牌面分数。
    • 如果当前轮次 i 小于等于3,则将 count 和 0 中的较大值添加到列表中,即 list.add(Math.max(count, 0))。这是因为如果当前轮次小于等于3,则选手无法回到上上轮,因此总分数应该置为0。
    • 如果当前轮次 i 大于3,则将 count 和上上轮的总分数 list[i-3] 中的较大值添加到列表中,即 list.add(count > list[i-3] ? count : list[i-3])。这是因为选手可以选择跳过当前轮,所以要比较 count 和跳过当前轮后的总分数,取较大值作为当前轮结束后的最高总分数。
  5. 输出列表中的最后一个元素 list[n-1],即所有轮结束后选手获得的最高总分数。

五、Java算法源码

public static void main(String[] args) {Scanner sc = new Scanner(System.in);String[] strs = sc.nextLine().split(",");int a = strs.length;int[] arr = new int[a];for (int i = 0; i < a; i++) {arr[i] = Integer.parseInt(strs[i]);}List<Integer> list = new ArrayList<>();if (Integer.parseInt(strs[0]) <= 0) {list.add(0);} else {list.add(arr[0]);}for (int i = 1; i < a; i++) {int count = list.get(i - 1) + arr[i];if (i < 3) {list.add(Math.max(count, 0));} else {list.add(count > list.get(i - 3) ? count : list.get(i - 3));}}System.out.println(list.get(a - 1));
}

六、效果展示

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/353782.html

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

相关文章

计算机处理器性能排名,cpu天梯图2018最新版 2018电脑cpu处理器性能排行榜

小编为大家分享2018年最新cpu天梯图,包含桌面端台式机cpu和移动端笔记本电脑cpu性能排行榜,电脑处理器cpu主要有Intel和AMD两大主流品牌。电脑cpu性能好坏决定一台电脑运算能力,所以用户买电脑时非常关心cpu的性能,cpu性能可以通过cpu天梯图来判断,现在是2018年,自然要看…

物理机服务器cpu性能排行榜,g务器cpu性能排行_CPU天梯图2019年7月份新版——CPU性能排行天梯图...

CPU天梯图2019年7月份新版——CPU性能排行天梯图2019(4) CPU天梯图2019年7月份新版——CPU性能排行天梯图2019(4)&#xff0c;入门级市场&#xff1a;0 - 600元 奔腾、赛扬依旧是经济型市场的主力出货处理器&#xff0c;然而过去一个月它们...>>2人转发 CPU天梯图2019年7…

工业相机分类、相关参数含义

一、工业相机参数 1、分辨率 分辨率是相机最基本的参数&#xff0c;由相机所采用的芯片分辨率决定&#xff0c;在采集图像时&#xff0c;相机的分辨率对检测精度有很大的影响&#xff0c;在对同样大的视场&#xff08;景物范围&#xff09;成像时&#xff0c;分辨率越高&…

HTML5简易涂鸦板制作

运行效果 代码中主要要学会阅读英文单词&#xff0c;务必认真学习English 代码清单1 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><script>var startX,startY;var flag false;window.onload …

canvas 制作简易涂鸦画板(教程)

公司大电视机是安卓系统而且系统,但因为突然无法联网又不允许第三方应用程序,但零时需要画板功能。所以就简单做个画板工具代替一下。 1.在canvas中获取光标坐标 获取坐标的代码很简单: <!DOCTYPE html> <html lang"en"><head><meta charset&qu…

基于涂鸦 Arduino SDK 制作的幻彩灯带(内涵详细开发步骤)

作者&#xff1a;金拱门门神 基于涂鸦Arduino SDK制作的幻彩灯带 物料清单硬件 (4) RGB灯带数量&#xff1a;1 淘宝10元Arduino Uno数量&#xff1a;1 淘宝25元涂鸦CBU模组数量&#xff1a;1 涂鸦提供PCB数量&#xff1a;1 捷配免费打样 步骤 1.在涂鸦平台创建产品 https…

PS制作涂鸦风格非主流图片教程

PS制作涂鸦风格非主流图片教程 2009-04-07 16:10:05 作者&#xff1a; 来源&#xff1a; 互联网 浏览次数&#xff1a; 227 文字大小&#xff1a;【 大】【 中】【 小】 效果图 1 效果图 2 原图 1、打开文件&#xff0c;新建一文档。如下图&#xff1a;

canvas涂鸦板

canvas涂鸦板 功能说明 此画板兼容PC端和移动端&#xff0c;是使用HTML5开发的一款画图软件&#xff0c;用户可以在画板中随意涂鸦&#xff0c;然后保存成图片 技术说明&#xff1a; 利用canvas的画图功能html5在pc端和移动端浏览器中的事件差异 开发步骤 html代码 <…

给文字做涂鸦效果的五种实现方案

介绍 在很多创意网站上&#xff0c;我们都会见到很多文字涂鸦效果&#xff0c;本期我们就介绍五种方法来实现这些文字涂鸦效果&#xff0c;康康如何通过前端技术&#xff0c;一起来让你的网页更有创意吧。 当然在做之前&#xff0c;我们先准备一张涂鸦纹理图哟~ 正文 backgr…

涂鸦音乐

在声音处理技术里有一种常用方法就是将声音信号转化成频谱图。比如下面这幅图&#xff0c;就是由一段小提琴演奏转化而来的。 有人会问&#xff0c;转成频谱图后又怎样呢&#xff1f;我不想谈接下来技术上可以做的各种分析&#xff0c;只从人感知信息的方式这个角度来说。 频谱…

c++小游戏制作02:涂鸦跳跳

先看效果图: 首先需要先下载安装SFML安装包,这里我下载的是64位的 然后解压放在一个文件夹下,记好路径 然后要在VS中加入路径 在VC++目录中配置包含目录和库目录 包含目录的路径:D:\SFML-2.5.1\include 库目录的路径:D:\SFML-2.5.1\lib 然后在链接器-输入-添加依赖项中…

涂鸦

在熟悉painter这个软件&#xff0c;开始胡乱的涂鸦&#xff0c;笔触虽多&#xff0c;不过要搞懂怎么用还真不是件简单的事。

【unity】分享一个2D小游戏的完整制作教程——涂鸦跳跃demo

文章目录 前言1.贴图准备跳板的逻辑人物的逻辑相机的逻辑如何自动生成跳板如何赢得游戏 前言 这个只是练手的一个2D小游戏&#xff0c;不许商用哦完成了原版的一个关卡的内容&#xff0c;跳板也只有一种&#xff0c;但是如果需要的话可以往深了做的项目地址Demo试玩&#xff0…

vb鼠标涂鸦板的制作

实验要求 掌握使用Picture1_MouseDown语句/Picture1_MouseUp&#xff0c;Picture1_MouseMove语句和Command Dialog的实现方法。实现鼠标画图程序。编写实验报告。 效果 清除画布的代码&#xff08;本实验没添加这个功能&#xff0c;留着备用&#xff09; Privte Sub Command…

制作一个有趣的涂鸦物联网小项目(涂鸦模组SDK开发 CBU BK7231N WiFi+蓝牙模组 HSV彩色控制)

实现的功能&#xff1a; l APP控制月球灯 l 本地月球灯控制 l APP控制“大白”颜色&#xff0c;实现各种颜色变身 l 门状态传感器状态APP显示 l 网络状态指示灯&#xff0c;连接服务器长亮&#xff0c;断开后闪烁 l 配网按键 l 云端定时功能 l 云端报警提示功能…

Arduino+涂鸦云,教你制作幻彩灯带

大家好&#xff0c;我是程序员小哈。前一阵参加了涂鸦智能【幻彩灯带】Arduino开发实战训练营&#xff0c;参与完整个过程&#xff0c;收获颇丰&#xff0c;今天对本次制作的幻彩灯带进行一下小结&#xff0c;希望以后可以再次参与其他内容的训练营活动。 概况 本次DIY内容为基…

Unity实现在白板上绘画涂鸦

前言 有段时间没有更新博客了&#xff0c;不知道应该写些什么&#xff0c;太简单感觉没有记录的必要&#xff0c;太难自己都没能理解&#xff0c;不知道如何下手。回归初心&#xff0c;记录自己想记录的东西。 需要实现一个白板绘画的功能&#xff0c;可以使用LineRenderer或者…

手机怎么使用涂鸦?分享几个手机视频怎么添加涂鸦的妙招

相信大家在给视频进行处理时&#xff0c;都会运用一些视频剪辑工具来给视频增添一些涂鸦等效果&#xff0c;比如把云朵涂鸦成独角兽或者与其相似的图案&#xff0c;让那些观看我们视频的人在视觉上增加了些许乐趣&#xff0c;不会显得视频画面太过于枯燥乏味。 那你们知道这些…

使用Fabric.js库制作一个绘画网站,实现绘画板涂鸦功能

1.学习之前 这个功能是基于vue的&#xff0c;如果你没有学过vue&#xff0c;可能对里面的知识不理解&#xff0c;对于canvas要有一点点的理解&#xff0c;如果没有&#xff0c;建议学习一下 如果实在需要关于Fabricjs写的绘画功能&#xff0c;可以看一下我参考其他人写的文档&a…

视频涂鸦怎么弄?视频涂鸦用什么软件?

随着时代的发展&#xff0c;大众对于“艺术”这个词的诠释也会变得不同。这段时间里&#xff0c;我的朋友在朋友圈、微博发布的视频都带有浓浓的个人风格&#xff0c;但总体上都是依据“涂鸦”这一形式来进行的。通过在视频中绘制涂鸦&#xff0c;来抒发内心的情绪、展示对艺术…