news 2026/7/8 5:46:57

(新卷,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/7/1 3:36:59

社会网络仿真软件:NetLogo_(4).NetLogo编程基础

NetLogo编程基础 在这一节中&#xff0c;我们将详细介绍NetLogo编程的基础知识&#xff0c;包括NetLogo的基本概念、环境设置、编程语言特性以及如何创建和运行简单的模型。通过这一节的学习&#xff0c;您将能够掌握NetLogo的基本编程技巧&#xff0c;为后续的复杂模型开发打下…

作者头像 李华
网站建设 2026/7/5 22:52:04

社会网络仿真软件:NetLogo_(6).数据导入与导出

数据导入与导出 在社会网络仿真软件NetLogo中&#xff0c;数据导入与导出是两个非常重要的功能&#xff0c;它们使得仿真模型能够与外部数据进行交互&#xff0c;从而增强模型的灵活性和实用性。通过数据导入&#xff0c;用户可以从外部文件中加载数据&#xff0c;用于初始化模…

作者头像 李华
网站建设 2026/7/1 9:15:04

【Matlab】MATLAB矩阵子矩阵索引详解:从语法案例到分块应用

MATLAB矩阵子矩阵索引详解:从语法案例到分块应用 在MATLAB矩阵操作体系中,子矩阵索引是比整行/列索引更灵活的核心技能,能够精准提取矩阵中任意连续或离散的子区域数据。无论是数据分块处理、局部特征提取,还是复杂数值计算中的区域运算,子矩阵索引都发挥着不可替代的作用…

作者头像 李华
网站建设 2026/7/1 8:45:42

Clawedbot 完整对接飞书教程 手把手搭建你的专属 AI 助手

Clawedbot 完整对接飞书教程 手把手搭建你的专属 AI 助手 注意本教程在 Linux 系统下进行 Clawdbot 由于 Claude 的版权问题&#xff0c;已更名为 Moltbot&#xff0c;因此本教程基于最新版本编写。下面进入安装流程 首先准备一台闲置的云服务器或 VPS&#xff08;推荐使用香港…

作者头像 李华
网站建设 2026/7/1 10:29:07

程序员如何利用AI进行数据可视化

程序员如何利用AI进行数据可视化 关键词:程序员、AI、数据可视化、算法原理、应用场景 摘要:本文旨在为程序员提供全面且深入的指导,详细阐述如何利用AI进行数据可视化。首先介绍相关背景知识,包括目的范围、预期读者等内容。接着讲解核心概念与联系,通过文本示意图和Merm…

作者头像 李华
网站建设 2026/7/1 8:45:47

GitHub MCP

在TRAE中集成GitHub MCP&#xff0c;相当于给你的AI助手配备了一套可以直接查询、操作GitHub仓库的专业工具。这能让AI在理解你的项目背景、生成相关代码或操作建议时&#xff0c;获得更精确的上下文。&#x1f527; 配置GitHub MCP Server你需要准备一个GitHub Personal Acces…

作者头像 李华