5键键盘的输出 - 华为OD统一考试

OD统一考试

题解: Java / Python / C++

alt

题目描述

有一个特殊的 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这两个有输出功能的键会先清空选择的字母,再进行输出
给定一系列键盘输入,输出最终屏幕上字母的数量。

输入描述

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

输出描述

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

示例1

输入
1 1 1

输出
3

说明
连续键入3个a,故屏幕上字母的长度为3

示例2

输入
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)

题解

模拟题, 维护屏幕、剪贴板和选择的状态,根据输入键进行更新。

C++

#include <iostream>

using namespace std;

int main() {
    string s;
    getline(cin, s);

    // 当前屏幕总字符数,选择的字符数,剪切板中的字符数
    int tot = 0, selectCnt = 0, clipboardCnt = 0;
    // 是否选择了字符
    bool selected = false;

    for (char op : s) {
        if (op == '1') { // a
            if (selected) {
                tot -= selectCnt;
                selected = false;
            }
            tot += 1;
        } else if (op == '2') { // ctrl-c
            if (selected) {
                clipboardCnt = selectCnt;
            }
        } else if (op == '3') { // ctrl-x
            if (selected) {
                tot -= selectCnt;
                clipboardCnt = selectCnt;
                selected = false;
            }
        } else if (op == '4') { // ctrl-v
            if (selected) {
                tot -= selectCnt;
                selectCnt = 0;
                selected = false;
            }
            tot += clipboardCnt;
        } else if (op == '5') { // ctrl-a
            selectCnt = tot;
            selected = true;
        }
    }

    cout << tot << endl;
    return 0;
}

Java

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();

        // 当前屏幕总字符数,选择的字符数,剪切板中的字符数
        int tot = 0, selectCnt = 0, clipboardCnt = 0;
        // 是否选择了字符
        boolean selected = false;

        for (char op : s.toCharArray()) {
            if (op == '1') { // a
                if (selected) {
                    tot -= selectCnt;
                    selected = false;
                }
                tot += 1;
            } else if (op == '2') { // ctrl-c
                if (selected) {
                    clipboardCnt = selectCnt;
                }
            } else if (op == '3') { // ctrl-x
                if (selected) {
                    tot -= selectCnt;
                    clipboardCnt = selectCnt;
                    selected = false;
                }
            } else if (op == '4') { // ctrl-v
                if (selected) {
                    tot -= selectCnt;
                    selectCnt = 0;
                    selected = false;
                }
                tot += clipboardCnt;
            } else if (op == '5') { // ctrl-a
                selectCnt = tot;
                selected = true;
            }
        }

        System.out.println(tot);
    }
}

Python

s = input()

# 当前屏幕总字符数,选择的字符数,剪切板中的字符数
tot,selectCnt,clipboardCnt = 0,0,0
# 是否选择了字符
selected = False

for op in s:
    if op == '1':  # a
        if selected:
            tot -= selectCnt
            selected = False
        tot += 1
    elif op == '2':  # ctrl-c
        if selected:
            clipboardCnt = selectCnt
    elif op == '3':  # ctrl-x
        if selected:
            tot -= selectCnt
            clipboardCnt = selectCnt
            selected = False
    elif op == '4':  # ctrl-v
        if selected:
            tot -= selectCnt
            selectCnt = 0
            selected = False
        tot += clipboardCnt
    elif op == '5':  # ctrl-a
        selectCnt = tot
        selected = True

print(tot)

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/235811.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

科研试剂2913223-17-1激酶抑制剂 KWCN-41

KWCN-41 激酶抑制剂 2913223-17-1&#xff08;源自星戈瑞&#xff09; EFdA-TP 核苷逆转录酶抑制剂 950913-56-1 (RT) 3-O-Methylviridicatin TNF-α的抑制剂 6152-57-4 Zidebactam sodium salt β-内酰胺酶抑制剂 1706777-46-9 Triacsin C 酰基辅酶A合成酶抑制剂 76896-80…

JVM虚拟机:命令行查看JVM垃圾回收器的执行信息

在eclipse中打开命令行窗口 window->show view->Terminal 这样就打开了Terminal窗口&#xff0c;效果如下所示&#xff1a; java -XX:PrintCommandLineFlags -version 这个命令可以查看一些配置信息&#xff0c;其中最重要的配置信息就是&#xff0c;当前使用的G1回收器…

操作系统笔记——储存系统、文件系统(王道408)

文章目录 前言储存系统地址转换内存扩展覆盖交换 储存器分配——连续分配固定大小分区动态分区分配动态分区分配算法 储存器分配——非连续分配页式管理基本思想地址变换硬件快表&#xff08;TLB&#xff09;多级页表 段式管理段页式管理 虚拟储存器——基于交换的内存扩充技术…

期待已久:K8S终于迎来交换内存Beta支持!

关注【云原生百宝箱】公众号&#xff0c;获取更多云原生消息 Kubernetes 1.22 版本开始支持在 Linux 节点上使用交换内存的 Alpha 特性&#xff0c;而在 1.28 版本中升级为 Beta 版本并进行了许多改进。之前版本的 Kubernetes 不支持 Linux 系统上的交换内存&#xff0c;但随着…

中伟视界:AI算法+巡检机器人——闸刀开关状态实时精准识别技术助力智慧电网建设

随着智慧电网建设的不断深入&#xff0c;电力设备的安全和稳定运行变得尤为重要。而闸刀开关作为电网系统中的重要组成部分&#xff0c;其状态的实时监测和识别对于确保电力系统的正常运行至关重要。为了解决传统人工巡检效率低、准确性差等问题&#xff0c;近年来&#xff0c;…

PHP基础 - 数组遍历与排序

介绍 在PHP中,数组遍历和排序是常见的操作,用于对数组中的元素进行访问和排序 数组遍历 1)数值数组的遍历 使用 foreach 循环遍历数组:foreach 循环是最常用的遍历数组的方法,它可以遍历索引数组和关联数组。例如:$fruits = array("apple", "banana&q…

Mysql dumpling 导入导出sql文件

一&#xff1a;导出命令 mysqldump -u root -p saishi > saishi.sql mysqldump -u root -p saishi > saishi.sql root是用户名 saishi是数据库名 saishi.sql导出文件名 二&#xff1a;选择导入的数据库 cd到安装mysql的文件下&#xff08;找不到可以用&#xff1a;wh…

将数组的行列结构调整为m行、n列ndarray.reshape(m,n)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将数组的行列结构 调整为m行、n列 ndarray.reshape(m,n) 选择题 以下代码的输出结果为&#xff1f; import numpy as np arr np.array([[1,2,3],[4,5,6]]) print("【显示】arr\n"…

XML映射文件(第二种方式执行SQL语句)

第一种方式是注解的方式在下面&#xff1a; 注解操作SQL语句https://blog.csdn.net/m0_71149935/article/details/134908856?spm1001.2014.3001.5501 要想使用XML&#xff0c;需要遵守三项规范&#xff1a; XML映射文件的名称与Mapper接口名称一致&#xff0c;并且将XML映射…

深入学习Redis:从入门到实战

Redis快速入门 1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启 1.4.Redis桌面客户端1.4.1.R…

win11系统修改电脑ip方法

之前win10系统可以很简单的修改电脑ip&#xff0c;更新win11后老是报这个错误 子掩码无法修改填写 接下来三张图片教你修改电脑ip

前端开发转行做渗透测试容易吗?通过挖漏洞来赚钱靠谱吗?

最近&#xff0c;一个做运维的朋友在学渗透测试。他说&#xff0c;他公司请别人做渗透测试的费用是 2w/人天&#xff0c;一共2周。2周 10w 的收入&#xff0c;好香~ CSDN大礼包&#xff1a;《黑客&网络安全入门&进阶学习资源包》免费分享 于是&#xff0c;我也对渗透测…

2023鸿蒙开发环境初体现验

开发环境 系统&#xff1a;mac os 13.2.1 (22D68) / Ventura IDE: DevEco Studio 3.1.1 Release 下载地址 注&#xff1a;安装好整个基础的开发环境&#xff0c;我的电脑磁盘空间又少了十几G&#xff01;&#xff01;&#xff01; 环境配置 下载IDE&#xff0c;安装启动后&a…

PUB文件可在Microsoft Publisher中打开,但没有改软件也可以打开

打开.pub文件最简单的方法是使用创建该文件的Microsoft Publisher程序。如果你没有MS Publisher,还有其他几种方法可以打开.pub。 在没有Microsoft Publisher的情况下查看PUB文件的方法 如果你有Microsoft Publisher文档,但无法使用Publisher,则可以使用一些工具、查看器和…

FISCO BCOS(十五)总体环境部署

从零进行环境搭建&#xff0c;拜托环境报错烦恼&#xff0c;为您极大的节省学习成本。 前提:使用命令解决电脑内复制虚拟机不能粘贴问题 ​ //安装工具open-vm-toolssudo apt-get install open-vm-tools //安装工具open-vm-tools-desktopsudo apt-get install open-vm-tools-d…

.NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(测试篇)

WebAppDbTest 项目测试 测试工具 ltt介绍安装使用方式1、Drill2、Hammer3、Nailgun 测试主机规格配置CRUD 性能测试对比1、ltt 工具测试1.1、AddSingle 单条数据添加1.2、AddBulk 批量数据&#xff08;1000&#xff09;条添加1.3、GetSingle 单条数据查询1.4、GetAll 多条&…

【小白专用】使用PHP创建和操作MySQL数据库,数据表

php数据库操作 php连接mysql数据库 <?php $hostlocalhost; // 数据库主机名 $username"root"; // 数据库用户名 $password"al6"; // 数据库密码 $dbname"mysql"; // 数据库名 $connIDmysqli_connect($host,$username,$password,$dbn…

关于uview-ui的u-tabs标签滑块不居中的问题

在uniapp中&#xff0c;打开文件 uni_modules/uview-ui/components/u-tabs/u-tabs.vue 然后在style中添加以下代码即可 /deep/ .u-tabs__wrapper__nav__line {left: 18rpx; } 之前效果图&#xff1a; 之后效果图&#xff1a; 注意&#xff0c;代码中的18rpx需要自行调整

LeetCode力扣每日一题(Java):35、搜索插入位置

一、题目 二、解题思路 1、我的思路&#xff08;又称&#xff1a;论API的重要性&#xff09; 读完题目之后&#xff0c;我心想这题目怎么看着这么眼熟&#xff1f;好像我之前学过的一个API呀&#xff01; 于是我回去翻了翻我之前写的博客&#xff1a;小白备战蓝桥杯&#xf…

女士内衣市场分析:预计2028年将达到643.08亿美元

内衣 (英文名:Underwear)&#xff0c;是指贴身穿的衣物。内衣有保暖及污秽的危害作用&#xff0c;有时会被视为性征。女士内衣行业生产的主要原料是各类织布或无纺布&#xff0c;成分有海绵、边、定型纱、骨胶、肩带等&#xff0c;布面料在内衣企业的生产成本中所占比重较大。女…