news 2026/2/12 10:45:32

(新卷,100分)- 5键键盘(Java JS Python)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(新卷,100分)- 5键键盘(Java JS Python)

(新卷,100分)- 5键键盘(Java & JS & Python)

题目描述

有一个特殊的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 1 1
输出3
说明连续键入3个a,故屏幕上字母的长度为3。
输入1 1 5 1 5 2 4 4
输出2
说明

输入两个a后ctrl-a选择这两个a,再输入a时选择的两个a先被清空,所以此时屏幕只有一个a,

后续的ctrl-a,ctrl-c选择并复制了这一个a,最后两个ctrl-v在屏幕上输出两个a,

故屏幕上字母的长度为2(第一个ctrl-v清空了屏幕上的那个a)。

题目解析

逻辑题,主要考察多情况的处理。

题目中没有准确说明 选择状态 何时被解除,比如我ctrl-a全选所有字母时,然后ctrl-c将选择的字母复制到剪贴板,那么此时屏幕中字母的选中状态是保留还是清除呢?

我理解ctrl-x剪切走屏幕内容,没有字母了,自然就没有选中状态了。另外,a、ctrl-v输入时,如果有字母选中状态,则输入时会覆盖选中内容,那么选中状态就没了。

Java算法源码
import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] commands = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray(); System.out.println(getResult(commands)); } public static int getResult(int[] commands) { ArrayList<String> screen = new ArrayList<>(); ArrayList<String> clip = new ArrayList<>(); boolean isSelect = false; for (int command : commands) { switch (command) { case 1: // a if (isSelect) screen.clear(); screen.add("a"); isSelect = false; break; case 2: // ctrl-c if (isSelect) { clip.clear(); clip.addAll(screen); } break; case 3: // ctrl-x if (isSelect) { clip.clear(); clip.addAll(screen); screen.clear(); isSelect = false; } break; case 4: // ctrl-v if (isSelect) screen.clear(); screen.addAll(clip); isSelect = false; break; case 5: // ctrl-a if (screen.size() != 0) isSelect = true; break; } } return screen.size(); } }
JS算法源码
/* JavaScript Node ACM模式 控制台输入获取 */ const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.on("line", (line) => { const directives = line.split(" "); console.log(getFinalLetterCount(directives)); }); function getFinalLetterCount(directives) { const screen = []; const clip = []; let isSelect = false; directives.forEach((directive) => { switch (directive) { case "1": // a if (isSelect) screen.length = 0; screen.push("a"); isSelect = false; break; case "2": // ctrl-c if (isSelect) { clip.length = 0; clip.push(...screen); } break; case "3": // ctrl-x if (isSelect) { clip.length = 0; clip.push(...screen); screen.length = 0; isSelect = false; } break; case "4": // ctrl-v if (isSelect) screen.length = 0; screen.push(...clip); isSelect = false; break; case "5": // ctrl-a if (screen.length !== 0) isSelect = true; break; } }); return screen.length; }
Python算法源码
# 输入获取 commands = list(map(int, input().split())) # 算法入口 def getResult(): screen = [] clip = [] isSelect = False for command in commands: if command == 1: if isSelect: screen.clear() screen.append("a") isSelect = False elif command == 2: if isSelect: clip.clear() clip.extend(screen) elif command == 3: if isSelect: clip.clear() clip.extend(screen) screen.clear() isSelect = False elif command == 4: if isSelect: screen.clear() screen.extend(clip) isSelect = False elif command == 5: if len(screen) != 0: isSelect = True return len(screen) # 调用算法 print(getResult())
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/11 6:23:10

(新卷,100分)- 单词接龙(Java JS Python)

(新卷,100分)- 单词接龙&#xff08;Java & JS & Python&#xff09; 题目描述 单词接龙的规则是&#xff1a; 可用于接龙的单词首字母必须要前一个单词的尾字母相同&#xff1b;当存在多个首字母相同的单词时&#xff0c;取长度最长的单词&#xff0c;如果长度也相…

作者头像 李华
网站建设 2026/2/10 4:45:21

(新卷,100分)- 第k个排列(Java JS Python)

(新卷,100分)- 第k个排列&#xff08;Java & JS & Python&#xff09; 题目描述 给定参数n&#xff0c;从1到n会有n个整数&#xff1a;1,2,3,…,n,这n个数字共有n!种排列。 按大小顺序升序列出所有排列的情况&#xff0c;并一一标记&#xff0c; 当n3时,所有排列如…

作者头像 李华
网站建设 2026/2/8 17:08:27

10、C语言程序设计:define编译预处理在嵌入式开发中的应用

define关键字 1. 定义常量 示例&#xff1a;硬件寄存器地址 // 定义GPIO端口基地址 define GPIOA_BASE_ADDRESS 0x40020000U define GPIOB_BASE_ADDRESS 0x40020400U // 定义寄存器偏移量 define GPIO_MODER_OFFSET 0x00U define GPIO_OTYPER_OFFSET 0x04U // 使用…

作者头像 李华
网站建设 2026/2/9 16:55:57

得物商品详情接入的场景

接入得物商品详情官方 API 的核心场景围绕企业级商业落地展开&#xff0c;覆盖电商对接、数据分析、工具开发、供应链协同四大核心方向&#xff0c;不同场景的接口使用逻辑、字段提取重点和业务落地方式差异显著&#xff0c;且均能依托 API 的合规性、实时性、结构化优势&#…

作者头像 李华
网站建设 2026/2/11 13:43:13

电力绝缘子缺陷检测:基于YOLOv26的智能识别系统_2

1. 电力绝缘子缺陷检测&#xff1a;基于YOLOv26的智能识别系统 1.1. 引言 &#x1f680; 电力系统是现代社会运转的命脉&#xff0c;而绝缘子作为输电线路中至关重要的组成部分&#xff0c;其健康状况直接关系到电网的安全稳定运行。传统的人工巡检方式不仅效率低下&#xff…

作者头像 李华
网站建设 2026/2/6 18:16:37

击剑运动员与武器识别 _ 基于YOLOv26的实时检测系统_1

HEMA Hit Detector数据集是一个专门用于击剑运动分析的数据集&#xff0c;包含2598张经过预处理的图像&#xff0c;数据集采用YOLOv8格式标注&#xff0c;主要包含两个类别&#xff1a;‘Fencer’&#xff08;击剑运动员&#xff09;和’Longsword’&#xff08;长剑&#xff0…

作者头像 李华