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

(新卷,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())
http://www.jsqmd.com/news/314037/

相关文章:

  • (新卷,100分)- 单词接龙(Java JS Python)
  • 吐血推荐研究生必用的10款AI论文工具
  • 宇树机器狗GO2在gazebo驱动仿真
  • 亲测好用10个AI论文网站,助你轻松搞定本科毕业论文!
  • gazebo仿真环境启动velodyne雷达
  • 信号处理仿真:信号处理基础_(3).模拟信号与数字信号转换
  • Thinkphp和Laravel学生宿舍管理系统功能多 echart统计可视化120wq-_
  • 今日,DeepSeek再次“拆掉重做”,开源架构炸场:OCR 2只是起点,这次要重构AI的“眼睛”和“大脑”?
  • 影悦电影推荐系统
  • 基于STM32单片机设计的智能坐垫_431
  • 68344
  • AI大模型数据治理 = 治理过程*AI增强:感知智能化、决策智能化、执行智能化、优化智能化
  • 谷歌和苹果应用商店发现数十款AI去衣应用
  • 冬季风暴考验因AI数据中心而紧张的电网系统
  • 网站建设完整指南:从零开始到跨平台部署
  • 单例模式 懒汉式(双重检查锁)
  • 用Ticker API写一个行情面板:一次完整的实现过程
  • 2026年1月28日
  • 社会网络仿真软件:NetLogo_(8).NetLogo在社会网络建模中的应用
  • 社会网络仿真软件:NetLogo_(8).社会网络动态分析
  • 1 人公司 + 智能体军团:流量、内容、营销、变现体系
  • weixin193基于微信小程序的社区垃圾回收管理系统ssm(源码)_kaic
  • 社会网络仿真软件:NetLogo_(9).可视化技术与应用
  • weixin194高校学习助手小程序ssm(源码)_kaic
  • 【毕设】基于Python的Django-html基于web漏洞挖掘技术的研究
  • 解读欧美安全准绳:一氧化碳报警器制造商如何精准选择核心器件
  • 社会网络仿真软件:NetLogo_(4).NetLogo编程基础
  • 社会网络仿真软件:NetLogo_(5).NetLogo模型库解析
  • 10、C语言程序设计:define编译预处理在嵌入式开发中的应用
  • 【Matlab】MATLAB矩阵子矩阵索引详解:从语法案例到分块应用