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

news2024/11/23 10:39:46

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)

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx反向代理跳过国内备案(以宝塔面板为例)

需要两台服务器&#xff0c;一台已备案或者免备案&#xff0c;一台国内主力服务器放你的项目。 先把域名解析到A服务器 然后在A服务器里配置 server {listen 80;server_name 你的域名;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_…

【C++】策略模式

目录 一、简介1. 含义2. 特点 二、实现1. 策略接口&#xff08;Strategy Interface&#xff09;2. 具体策略类&#xff08;Concrete Strategies&#xff09;3. 上下文类&#xff08;Context&#xff09;4. 使用策略模式 三、总结如果这篇文章对你有所帮助&#xff0c;渴望获得你…

卷积神经网络(含案例代码)

概述 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一类专门用于处理具有网格结构数据的神经网络。它主要被设计用来识别和提取图像中的特征&#xff0c;但在许多其他领域也取得了成功&#xff0c;例如自然语言处理中的文本分类任务。 C…

arthas一次操作实现递归分析下游方法的耗时

背景 使用arthas的trace分析方法的耗时时&#xff0c;我们一般只能分析下一层的方法的耗时&#xff0c;然后一层一层的递归进去找到耗时最长的那个方法&#xff0c;有没有一种方式可以一次trace分析就可以把所有要关注的下层所有的耗时都打印出来&#xff1f; 解决方式 使用…

苍穹外卖项目笔记(12)— 数据统计、Excel报表

前言 代码链接&#xff1a; Echo0701/take-out⁤ (github.com) 1 工作台 需求分析和设计 产品原型 工作台是系统运营的数据看板&#xff0c;并提供快捷操作入口&#xff0c;可以有效提高商家的工作效率 接口设计 ① 今日数据接口&#xff1a; ② 订单管理接口&#xff1…

TSINGSEE青犀基于EasyCVR与AI技术的高校实验室视频可视化监管方案

一、行业背景 实验室作为科研、教学过程中的一个重要场所&#xff0c;其管理也十分至关重要。尤其是高校实验室安全问题&#xff0c;教育部《高等学校实验室安全规范》中说明&#xff0c;需要进一步加强高校实验室的安全管理工作&#xff0c;实现规范化、常态化的管理体制&…

2019年第八届数学建模国际赛小美赛D题安全选举的答案是什么解题全过程文档及程序

2019年第八届数学建模国际赛小美赛 D题 安全选举的答案是什么 原题再现&#xff1a; 随着美国进入一场关键性的选举&#xff0c;在确保投票系统的完整性方面进展甚微。2016年总统大选期间&#xff0c;唐纳德特朗普因被指控受到外国干涉而入主白宫&#xff0c;这一问题再次成为…

跟着我学Python基础篇:08.集合和字典

往期文章 跟着我学Python基础篇&#xff1a;01.初露端倪 跟着我学Python基础篇&#xff1a;02.数字与字符串编程 跟着我学Python基础篇&#xff1a;03.选择结构 跟着我学Python基础篇&#xff1a;04.循环 跟着我学Python基础篇&#xff1a;05.函数 跟着我学Python基础篇&#…

HPM5300系列--第二篇 Visual Studio Code开发环境以及多种调试器调试模式

一、目的 在博文《HPM5300系列--第一篇 命令行开发调试环境搭建》、《HPM6750系列--第四篇 搭建Visual Studio Code开发调试环境》中我们介绍了命令行方式开发环境&#xff0c;也介绍了HPM6750evkmini开发板如何使用Visual Studio Code进行开发调试&#xff08;其中调试方式使用…

了解一下DHCP

DHCP的工作原理 本质&#xff1a; 1、物理网卡自身集成了DHCP的功能&#xff0c;为了请求获取合法、可用的IP 2、DHCP服务端核心功能在于&#xff1a;通过自定义的网段的地址池&#xff0c;来给与新加入的网络环境的设备以租约的方式分配合法IP 1.什么是DHCP 1.1DHCP定义 …

【JUC】二十九、synchronized锁升级之轻量锁与重量锁

文章目录 1、轻量锁2、轻量锁的作用3、轻量锁的加锁和释放4、轻量级锁的代码演示5、重量级锁6、重量级锁的原理7、锁升级和hashcode的关系8、锁升级和hashcode关系的代码证明9、synchronized锁升级的总结10、JIT编译器对锁的优化&#xff1a;锁消除和锁粗化11、结语 &#x1f4…

Mac 如何删除文件及文件夹?可以尝试使用终端进行删除

MacOS 是 Mac 电脑采用的操作系统&#xff0c;你知道 Mac 如何删除文件吗&#xff1f;除了直接将文件或者文件夹拖入废纸篓之外&#xff0c;我们还可以采用终端命令的办法去删除文件&#xff0c;本文为大家总结了 Mac 删除文件方法。 为何使用命令行删除文件 在使用 Mac 电脑…

纯前端使用XLSX导出excel表格

1 单个sheet page.js(页面中的导出方法) import { exportExcel } from ../../../utils/exportExcel.js; leadOut() {const arr [{ id: 1, name: 张三, age: 14, sex: 男 },{ id: 2, name: 李四, age: 15, sex: 女 },{ id: 3, name: 王五, age: 16, sex: 男 },];const allR…

6.4.如何生成SDP

在我们前面的课程中呢&#xff0c;我已经向你介绍了很多sdp相关的内容&#xff0c;那今天呢&#xff0c;我们来看看如何生成sdp。 那我们的目标呢&#xff0c;当然就是生成这样一个文本&#xff0c;那这个文本呢&#xff0c;就是sdp文本那里边包括了各种各样的媒体信息&#…

GPIO模拟MDIO

背景 CPU&#xff1a;AST2500 驱动里实现GPIO模拟MDIO驱动,参考内核驱动mdio-bitbang.c和mdio-gpio.c&#xff0c;当前项目不支持设备树&#xff0c;驱动需要改成platform注册 MDIO介绍 SMI接口 SMI是MAC内核访问PHY寄存器接口&#xff0c;它由两根线组成&#xff0c;双工…

论文阅读《Parameterized Cost Volume for Stereo Matching》

论文地址&#xff1a;https://openaccess.thecvf.com/content/ICCV2023/papers/Zeng_Parameterized_Cost_Volume_for_Stereo_Matching_ICCV_2023_paper.pdf 源码地址&#xff1a;https://github.com/jiaxiZeng/Parameterized-Cost-Volume-for-Stereo-Matching 概述 现有的立体匹…

c# 字段和属性(get、set、init)

目录 基本概念&#xff1a; 个人理解&#xff1a; 访问器的默认写法&#xff1a; set与init无法共存&#xff1a; init&#xff1a; 必须在类的实例化时给字段赋值的情况(require属性): 基本概念&#xff1a; “字段”就是类内成员变量&#xff0c;一般为了隐藏数据&…

超详细教程:使用React实现动态轮播图

前言 轮播组件是常见的一种方式&#xff0c;用来展示图像、信息或者是广告。我们可以使用React来创建一个轮播组件&#xff0c;并且利用其中的State和effect Hook来创建一款动态的、可以自动播放的轮播组件。 效果 轮播组件会展示一个平铺的图片列表。在图片列表下方是一组小…

java定位系统源码,UWB技术的无线定位系统源码

UWB技术是一种传输速率高&#xff0c;发射功率较低&#xff0c;穿透能力较强并且是基于极窄脉冲的无线技术。UWB最优的应用环境是室内或者相对密闭的空间&#xff0c;有着厘米级的定位精度&#xff0c;不仅可以非常精准地进行位置跟踪&#xff0c;还可以快速地进行数据传输。 智…

基于亚马逊云科技新功能:Amazon SageMaker Canvas无代码机器学习—以构建货物的交付状态检测模型实战为例深度剖析以突显其特性

授权说明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在亚马逊云科技开发者社区、 知乎、自媒体平台、第三方开发者媒体等亚马逊云科技官方渠道。 目录 &#x1f680;一. Amazon SageMaker &#x1f50e;1.1 新功能发布&#xff1a;A…