(C卷,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())

免责声明:

1、IT资源小站为非营利性网站,全站所有资料仅供网友个人学习使用,禁止商用
2、本站所有文档、视频、书籍等资料均由网友分享,本站只负责收集不承担任何技术及版权问题
3、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除下载链接并致以最深的歉意
4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
5、一经注册为本站会员,一律视为同意网站规定,本站管理员及版主有权禁止违规用户
6、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和IT资源小站的同意
7、IT资源小站管理员和版主有权不事先通知发贴者而删除本文

0

评论0

站点公告

没有账号?注册  忘记密码?