华为OD机试真题 Python 实现【获得完美走位】【2022Q4 200分】

news2024/11/26 4:48:30

在这里插入图片描述

一、题目描述

在第一人称射击游戏中,玩家通过键盘的 A、S、D、W 四个按键控制游戏人物分别向左、向后、向右、向前进行移动,从而完成走位假设玩家每按动一次键盘,游戏任务会向某个方向移动一步,如果玩家在操作一定次数的键盘并且各个方向的步数相同时,此时游戏任务必定会回到原点,则称此次走位为完美走位。

现给定玩家的走位(例如: ASDA),请通过更换其中一段连续走位的方式使得原走位能够变成一个完美走位。其中待更换的连续走位可以是相同长度的任何走位。

请返回待更换的连续走位的最小可能长度,如果原走位本身是一个完美走位,则返回 0。

二、输入描述

输入为由键盘字母表示的走位 s,例如: ASDA

三、输出描述

输出为待更换的连续走位的最小可能长度。

四、解题思路

  1. 读取输入的走位字符串 line;
  2. 初始化计数变量 numA、numS、numD、numW 分别表示 A、S、D、W 四个方向的步数;
  3. 使用循环遍历走位字符串,统计各个方向的步数;
  4. 初始化变量 res 为最大整数值,用于记录待更换连续走位的最小可能长度;
  5. 计算每个方向需要补充的步数:a = Math.max(numA - p, 0)、w = Math.max(numW - p, 0)、s = Math.max(numS - p, 0)、d =
    Math.max(numD - p, 0),其中 p = line.length() / 4 表示每个方向的平均步数;
  6. 如果每个方向需要补充的步数都为0,表示原走位已经是一个完美走位,输出0并结束程序;
  7. 使用循环遍历走位字符串,计算每个位置开始的待更换连续走位的最小可能长度;
    • 调用 match 方法计算从当前位置开始,补充指定步数后是否能形成完美走位,返回能够形成完美走位的最后位置;
    • 更新 res 为最小长度;
  8. 输出结果 res;

五、Java算法源码

def calculate_min_length(line):
    num_A = 0
    num_S = 0
    num_D = 0
    num_W = 0

    for i in range(len(line)):
        # 统计各个方向的步数
        if line[i] == 'A':
            num_A += 1
        elif line[i] == 'S':
            num_S += 1
        elif line[i] == 'D':
            num_D += 1
        else:
            num_W += 1

    res = float('inf')
    p = len(line) // 4  # 每个方向的平均步数
    a = max(num_A - p, 0)  # 需要补充的 A 方向步数
    w = max(num_W - p, 0)  # 需要补充的 W 方向步数
    s = max(num_S - p, 0)  # 需要补充的 S 方向步数
    d = max(num_D - p, 0)  # 需要补充的 D 方向步数

    if a == 0 and w == 0 and s == 0 and d == 0:
        # 如果原走位已经是完美走位,返回 0
        return 0

    for i in range(len(line)):
        # 计算每个位置开始的待更换连续走位的最小可能长度
        res = min(res, match(line, i, a, w, s, d) - i + 1)

    return res


def match(string, index, a, w, s, d):
    if string[index] == 'A' and a > 0:
        a -= 1
    if string[index] == 'W' and w > 0:
        w -= 1
    if string[index] == 'S' and s > 0:
        s -= 1
    if string[index] == 'D' and d > 0:
        d -= 1
    if a == 0 and w == 0 and s == 0 and d == 0:
        return index
    if index + 1 >= len(string):
        return 1000000
    return match(string, index + 1, a, w, s, d)

六、效果展示

1、输入

ASWW

2、输出

1

3、说明

保持 W,A,S,D 字母个数平衡,即相等,如果不相等,可以从字符串中选取一段连续子串替换,来让字符串平衡。

ASWW,将W变为D,即可获得完美走位,所以输出1。

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【基站维修工程师】【2023Q1 200分】,附详细解题思路

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

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

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

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

相关文章

经典文献阅读之--Wheel-SLAM(低成本轮式机器人定位算法)

0. 简介 最近随着越来越多的团队开始注重将SLAM应用在机器人和无人驾驶上,最近SLAM的顶刊顶会也开始想着多模态和低成本这两个方向开始发力。而本文讲的这个《Wheel-SLAM: Simultaneous Localization and Terrain Mapping Using One Wheel-mounted IMU》就是讲了如…

Scala中那些奇怪的符号

<- 运算符 用于 for 循环中&#xff0c;如下所示&#xff1a; for ( i <- arr ){println( "i" i ) } -> 只会用在 k->v 里面 // Map 键值对演示 val colors Map("red" -> "#FF0000", "azure" -> "#F0FF…

WPF 控件设置透明度的方法

方法一&#xff1a;通过 Opacity 属性设置背景色透明度。范围从0-1&#xff0c;0表示完全透明&#xff0c;看不见。 通过 Opacity 属性去改变控件透明度 会影响子控件的透明度&#xff0c;是因为Opacity属性是在UIElement 类(以及Brush基类)中定义&#xff0c;所有元素都具有该…

python分析QQ群聊天记录全过程,从获取到可视化

​ 随着社交媒体的兴起&#xff0c;QQ群成为了人们交流的重要平台&#xff0c;而提取这些数据可以帮助我们了解用户关注的重点和行为&#xff0c;那么如何获取QQ群聊天记录呢&#xff1f;如何对其进行处理并分析呢&#xff1f; 这是一套完整的流程&#xff0c;从选定的QQ群中…

2023最新版SpringCloudAlibaba笔记,把微服务玩的出神入化

SpringCloud Alibaba 大家都知道&#xff0c;新的东西出现必然是因为市场的需求。由于 SpringCloud 版本更新较快&#xff0c;日积月累之下产生了许多的 Bug&#xff0c;所以 SpringCloud 微服务实现方式&#xff1a;Spring Cloud Netflix 自然而然地进入了维护状态&#xff0…

java计算器拓展

源代码&#xff1a; package shixun; import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.JButton; import javax.swing.SwingConstants;import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.Font; impor…

Golang项目引入第三方依赖库

基本目录 第一步&#xff1a; 初始化依赖&#xff0c;切换到项目根目录下面&#xff0c;执行一下命令&#xff0c;g6 为 module 的名称 go mod init g6 生成 go.mod 文件 module g6 go 1.20 将来我们项目的所有依赖都会依赖于 g6 第二步&#xff1a; 引入第三方依赖 &qu…

禁烟警示器报警器

本例介绍的禁止吸烟警示器&#xff0c;可用于家庭居室或各种不宜吸烟的场合 (例如医院、会议室等)。当有人吸烟时&#xff0c;该禁止吸烟警示器会发出"请不要吸烟!"的语言警示声&#xff0c;提醒吸烟者自觉停止吸烟。 一、电路工作原理 电路原理如图 5 所示。 该…

3-如何创建等比数列?【视频版】

目录 问题视频解答 问题 视频解答 点击观看&#xff1a; 3-如何创建等差数列&#xff1f;

一文带你了解WebSocket与技术原理

文章目录 一、技术发展史二、什么是WebSocket三、WebSocket与Socket四、WebSocket 机制五、WebSocket API简单实现 一、技术发展史 在了解WebSocket之前&#xff0c;我们先了解这项技术的发展史&#xff0c;它可以追溯到2008年&#xff0c;当时HTML5规范中引入了该协议作为一种…

【Java】Java核心 80:Git 教程(3)初始化工作区 add与commit

文章目录 04.GIT本地操作-初始化工作区目标内容小结 05.GIT本地操作-add与commit目标内容小结 在Git中&#xff0c;初始化工作区并使用add和commit命令是进行版本控制的基本操作。 下面是对这些操作的简要解释&#xff1a; 初始化工作区&#xff1a;在使用Git之前&#xff0c…

【语音播报】没时间刷新闻热搜?让博灵语音通知终端读给你听!-声光报警灯|语音播报器|Modbus报警灯|网口语音播报|网络语音播报器

背景 每天上班太忙碌&#xff0c;没有时间刷微博&#xff0c;新闻发展的太快&#xff0c;生怕错过微博热搜&#xff0c;看着手边的博灵语音通知终端&#xff0c;决定自己写一个脚本&#xff0c;让它给我读新闻&#xff01; 少废话&#xff0c;先看东西 实现了以下效果 每90…

02 快速定位关键点并爆破

vm所进行的代码级的保护是对于软件保护的最后一层 1、API断点法 如何切换到程序的代码节的位置&#xff1f; 》od点击e->双击xxx.exe即可 程序需要读取文本框输入的内容&#xff0c;所以肯定会调用GetWindowText函数&#xff0c;所以可以ctrlg然后输入GetWindowText进行…

ChatGPT 和 Elasticsearch:分面、过滤和更多上下文

作者&#xff1a;Luca Wintergerst 在最近的一篇博客文章中&#xff0c;我们讨论了 ChatGPT 和 Elasticsearch 如何协同工作以帮助更有效地管理专有数据。 通过利用 Elasticsearch 的搜索功能和 ChatGPT 的上下文理解&#xff0c;我们演示了如何改进结果。 在这篇文章中&#…

制造业数字化转型难?低代码带来曙光

概要&#xff1a;制造业企业在数字化转型中一直面临着许多困难和挑战&#xff0c;中小企业更是如此。天翎低代码平台通过自身可视化设计、私有化部署、灵活性、扩展性和兼容性等特性&#xff0c;帮助制造业企业更好地完成数字化转型目标。不仅如此&#xff0c;天翎还推出了微鳄…

iview tree树形控件多选,自定义内容

项目中需要一个iview框架的树形控件,需要里面包含以下功能 1、控件宽度可展开,可缩小2、树形控件可搜索,并且定位到搜索的节点3、控件可以一键勾选,一键取消4、控件图标自定义5、 点击最后一个节点时可以进入到二级节点,点击上一节点可返回完整代码:listToTree文件 效果图: 具…

标准模版库 知识点总结 C++程序设计与算法笔记总结(八) 北京大学 郭炜

标准模版库 https://blog.csdn.net/shaozheng0503/article/details/129101932?ops_request_misc%257B%2522request%255Fid%2522%253A%2522168802585416800211563089%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id1688025854168…

前端判断img图片未能正确加载时显示一个默认图片。img标签onerror事件设置了本地默认图片还是不显示的问题

前端img标签中引用后端交给的图片地址时&#xff0c;有可能这个路径下图片被删除或者损坏了&#xff0c;那么页面在加载img图片时就显示为&#xff0c;太丑了。 img标签有个onerror事件&#xff0c;就是当图片未被正确加载的时候调用此事件&#xff0c;写的时候在onerror事件里…

安装国产系统Kylin-Desktop实战

前言 随着国产化系统的呼声越来越高&#xff0c;再加上今年6月红帽公司发表声明&#xff0c;只有付费才能拿到代码的通告&#xff0c;学习国产化势在必行。 在众多的国产化系统中&#xff0c;我选择了排名比较高的系统&#xff0c;今天我们就一起来安装下麒麟的操作系统 &…

习题-集合框架

目录 1.打印信息 2.ArrayList的使用 User类 测试类 3.Set的使用 汽车类 测试类 4.ArrayList使用 5.新闻 新闻类 测试类 6.返回索引 7.删除重复QQ 8.Map集合操作 9.成绩排序 学生类 测试类 10.Map基础题 学员类 测试类 11.遍历Map综合-国家名称 12.Collec…