华为OD机试真题B卷 JavaScript 实现【5键键盘的输出】,附详细解题思路

news/2024/12/29 17:02:40/

在这里插入图片描述

一、题目描述

有一个特殊的5键键盘,上面有a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键。

a键在屏幕上输出一个字母a;ctrl-c将当前选择的字母复制到剪贴板;ctrl-x将当前选择的字母复制到剪贴板,并清空选择的字母;ctrl-v将当前剪贴板里的字母输出到屏幕;ctrl-a选择当前屏幕上的所有字母。

注意:

  1. 剪贴板初始为空,新的内容被复制到剪贴板时会覆盖原来的内容;
  2. 当屏幕上没有字母时,ctrl-a无效;
  3. 当没有选择字母时,ctrl-c和ctrl-x无效;
  4. 当有字母被选择时,a和ctrl-v这两个有输出功能的键会先清空选择的字母,再进行输出;

给定一系列键盘输入,输出最终屏幕上字母的数量。

二、输入描述

输入为一行,为简化解析,用数字1 2 3 4 5代表a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键的输入,数字用空格分隔。

三、输出描述

输出一个数字,为最终屏幕上字母的数量。

四、解题思路

  1. 定义三个字符串变量:screen、choose、temp,分别表示屏幕上的字母、选择的字母、剪贴板中的字母;
  2. 读取输入的数字指令,使用split方法将其拆分为字符串数组;
  3. 遍历字符串数组,对每个数字指令执行相应的操作;
  4. 根据当前数字指令的值,使用switch语句判断执行的操作:
    • case 1: 表示按下’a’键。如果选择的字母为空,则将’a’添加到屏幕上的字母中;否则,清空选择的字母,将’a’作为新的屏幕上的字母。
    • case 2: 表示按下’ctrl-c’键。将当前选择的字母复制到剪贴板中(存储到temp变量)。
    • case 3: 表示按下’ctrl-x’键。将当前选择的字母复制到剪贴板中(存储到temp变量),并清空选择的字母和屏幕上的字母。
    • case 4: 表示按下’ctrl-v’键。如果选择的字母为空,则将剪贴板中的字母添加到屏幕上的字母中;否则,清空选择的字母,将剪贴板中的字母作为新的屏幕上的字母。
    • case 5: 表示按下’ctrl-a’键。将当前屏幕上的所有字母作为选择的字母。
  5. 循环结束后,输出屏幕上字母的数量,即screen的长度。

该算法模拟了特殊的5键键盘的操作流程,根据输入的数字指令执行相应的操作,并记录屏幕上的字母。最后输出屏幕上字母的数量。算法的时间复杂度为O(n),其中n为输入数字指令的数量。

五、JavaScript算法源码

let screen = '';
let choose = '';
let temp = '';function input(num) {switch (num) {case 1: // a键if (choose === '') {screen += 'a';} else {choose = '';screen = 'a';}break;case 2: // ctrl-c键temp = choose;break;case 3: // ctrl-x键temp = choose;choose = '';screen = '';break;case 4: // ctrl-v键if (choose === '') {screen += temp;} else {screen = temp;choose = '';}break;case 5: // ctrl-a键choose = screen;break;default:break;}
}function calculate(inputStr) {const arr = inputStr.trim().split(' ');for (let i = 0; i < arr.length; i++) {const num = parseInt(arr[i]);if (!isNaN(num) && num >= 1 && num <= 5) {input(num);} else {console.log('输入不合法,请输入1~5之间的数字!');rl.close();return;}}return screen.length
}

六、效果展示

1、输入

1 1 1 5 2 4 1 4

2、输出

7

3、说明

aaa、ctrl-a、ctrl-c、ctrl-v、a、ctrl-v = aaaaaaa

在这里插入图片描述


🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述


http://www.ppmy.cn/news/310836.html

相关文章

阿里云安装和远程连接mysql8.0数据库

在阿里云服务器安装MySQL的具体文章参考连接文章&#xff1a; 阿里云ECS服务器安装mysql8_阿里云安装mysql8.0_昨日晨曦丶的博客-CSDN博客 我就是完全按照上面的文章来进行安装的&#xff0c;可以成功的安装&#xff0c;但是安装与远程连接过程会遇到两个问题&#xff0c;本篇…

vim vi

文首&#xff0c;文尾&#xff0c;行首&#xff0c;行尾 &#xff08;都需要在命令行模式&#xff09; 文首&#xff1a;gg文尾&#xff1a;G行首&#xff1a;^ (shift 6) &#xff08;或者 0&#xff09;行尾&#xff1a;$ (shift 4):%s#abc#123#g (#可用/替换,:%s/abc/123…

vim配置项解析

vim配置项添加及解析 首先打开配置文件&#xff1a; sodu vim /etc/vim/vimrc输入需要的配置项&#xff1a; "关闭兼容模式 set nocompatible "设置历史记录步数 set history100 "开启相关插件 filetype on filetype plugin on filetype indent on "当文…

linux基础五 vim

一、快捷键 1&#xff09;一般模式 2)编辑模式 3&#xff09;命令模式 4、区块选择 5、多文档编辑 vim后边接多个文档 6、多窗口编辑 7、环境设置参数

vi 和 vim 基本介绍

Linux系统会内置vi文本编辑器 Vim可以看做Vi的增强版本&#xff0c;具有代码补全&#xff0c;编译&#xff0c;错误跳转等功能。 常用的三种模式 正常模式&#xff08;一般模式&#xff09;&#xff1a; vim打开一个文档直接进入一般模式&#xff08;默认的模式&#xff09;。…

IPv6 kernel config

kernel 4.4 kernel配置ipv6可参考如下配置 1、 Networking support ---> Networking options ---> [*]The IPv6 protocol 2、 Networking support ---> Networking options ---> Network packet filtering framework (Netfilter) ---> IPv6 Netfilter Config…

linux vi命令详解

进入vi的命令 vi filename :打开或新建文件&#xff0c;并将光标置于第一行首 vi n filename &#xff1a;打开文件&#xff0c;并将光标置于第n行首 vi filename &#xff1a;打开文件&#xff0c;并将光标置于最后一行首 vi /pattern filename&#xff1a;打开文件&#xff…

vim参数详解

借用鸟哥大人的精美说明&#xff0c;贴在这里以防自己忘记的时候查看。 一般模式&#xff1a; 移動游標的方法 h 或 向左方向鍵(←) 游標向左移動一個字元 j 或 向下方向鍵(↓) 游標向下移動一個字元 k 或 向上方向鍵(↑) 游標向上移動一個字元 l 或 向右方向鍵(→) 游標向右移…