当前位置: 首页 > news >正文

华为OD机试真题双机位C卷 【完美走位】C语言实现

完美走位

2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 100分题型

华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录|机考题库 + 算法考点详解

其它语言题解链接

华为OD机试真题 - 完美走位 (Python & C++ & JAVA & JS & GO)

题目描述

在第一人称射击游戏中,玩家通过键盘的A、S、D、W四个按键控制游戏人物分别向左、向后、向右、向前进行移动,从而完成走位。

假设玩家每按动一次键盘,游戏任务会向某个方向移动一步,如果玩家在操作一定次数的键盘并且各个方向的步数相同时,此时游戏任务必定会回到原点,则称此次走位为完美走位。

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

请返回待更换的连续走位的最小可能长度。

如果原走位本身是一个完美走位,则返回0。

输入描述

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

输出描述

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

用例1

输入

WASDAASD

输出

1

说明

将第二个A替换为W,即可得到完美走位

示例二

输入

AAAA

输出

3

说明

将其中三个连续的A替换为WSD,即可得到完美走位.

题解

思路

本题采用滑动窗口解决:

  1. 题目对于完美走位定义其实就是字符串中ASWD字母数量相同。

  2. 对于一个不完美走位的字符串通过修改一段连续的走位要想变成完美走位,那么这段连续走位必须满足包含所有多于平均数量的字符,并且每种多余平均数量的字符 在一段连续走位中数量大于等于多余部分数量。可能有点抽象,举个例子,例如现在A多两个,B多一个。找的区间必须满足这段区间至少包含两个A和一个B。

  3. 满足上述条件的最短区间就是这道题的结果。对于这类题可直接采用滑动窗口进行解决:

    • 计算AWSD每个字符在原字符串中的数量,以及超过的数量。如果都等于平均数量则已经是完美走位,输出0,否则进行下面逻辑。

    • 定义left = 0, right = 0, right开始不断右移,直到区间内满足上述2分析的要求时,这时候要寻求最短区间,尝试左边界右移,缩小边界,直到不满足3的要求时,继续尝试right右移。

    • 记录上述逻辑满足条件的最短窗口长度就是结果。

code

#include<stdio.h>#include<string.h>intmain(){// 长度可以根据输入长度变换chars[100010];scanf("%s",s);intn=strlen(s);// 不可能有解,冗余处理if(n%4){printf("-1\n");return0;}inttarget=n/4;// 记录每个字符的数量intcount_A=0,count_S=0,count_D=0,count_W=0;// 统计每个字符的数量for(inti=0;i<n;i++){switch(s[i]){case'A':count_A++;break;case'S':count_S++;break;case'D':count_D++;break;case'W':count_W++;break;}}// 计算多余数量intexcess_A=(count_A>target)?count_A-target:0;intexcess_S=(count_S>target)?count_S-target:0;intexcess_D=(count_D>target)?count_D-target:0;intexcess_W=(count_W>target)?count_W-target:0;// 已经是完美走位if(excess_A+excess_S+excess_D+excess_W==0){printf("0\n");return0;}// 滑动窗口intmin_len=n;intwindow_A=0,window_S=0,window_D=0,window_W=0;intleft=0;for(intright=0;right<n;right++){// 更新窗口计数switch(s[right]){case'A':window_A++;break;case'S':window_S++;break;case'D':window_D++;break;case'W':window_W++;break;}// 当窗口满足条件时收缩, 满足条件(窗口内所有字符大于等于 对应字符超过平均的数量)while(left<=right&&window_A>=excess_A&&window_S>=excess_S&&window_D>=excess_D&&window_W>=excess_W){intlen=right-left+1;if(len<min_len)min_len=len;// 左指针移动,更新窗口计数switch(s[left]){case'A':window_A--;break;case'S':window_S--;break;case'D':window_D--;break;case'W':window_W--;break;}left++;}}printf("%d\n",min_len);return0;}
http://www.jsqmd.com/news/231093/

相关文章:

  • 论文AI率99%还有救吗?别放弃,这样改
  • AIGC检测原理解析:知己知彼才能百战百胜
  • 吐血推荐10个AI论文软件,助你轻松搞定本科生毕业论文!
  • 7 款 AI 论文写作工具,轻松满足格式要求并兼容 LaTeX 模板
  • 论文降AI率要花多少钱?省钱攻略分享
  • 论文查重变得简单高效,8款AI工具助你快速降重优化
  • 借助AI的力量,论文查重不再复杂,8款工具任你选择
  • 零基础学Linux:21天从“命令小白”到独立部署服务器
  • 基于STM32的电子时钟设计与实现
  • 论文被打回说AI率太高,三天内怎么改好?
  • 学习笔记——HC-SR04 超声波测距传感器
  • 7 个 AI 论文辅助平台,自动调整格式并适配 LaTeX 模板
  • 硕士论文AI检测要求是多少?怎么达标?
  • 4.14 DeerFlow特点与架构:项目架构、主要功能、工作流设计
  • 本科毕业论文AI检测全流程指南
  • 《创业之路》-825-从**第一性原理(First Principles)**看世界万象
  • 论文查重效率提升,8款AI工具让改写降重更智能
  • 大事件Day02
  • 告别繁琐的论文查重,8款AI辅助工具一键优化文本
  • pg on delete 策略探讨
  • 8款AI工具深度对比,让你的论文查重过程更加流畅
  • 当我们运行一个Java程序时,是否每个Java程序都会分配一个独立的Java虚拟机(JVM)实例呢?
  • kubernetes中operator与helm有什么区别?部署mysql集群是选择operator部署还是helm chart部署?
  • 8款智能工具深度测评,高效解决论文查重难题
  • 算法工程化十年演进(2015–2025)
  • 下沉区域田忌赛马公司就业的分析
  • 视觉语言模型十年演进(2015–2025)
  • BEV感知十年演进(2015–2025)
  • VLA十年演进(2015–2025)
  • 2026必备!9个AI论文软件,自考学生轻松搞定毕业论文!