华为机试【5、5键键盘的输出 】

5、标题:5键键盘的输出
【5键键盘的输出】有一个特殊的 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五个键的输入,数字用空格分隔
输出描述:
输出一个数字,为最终屏目上字母的数量。
示例:
输入
111
输出
3

def screen_end(s):
    screen = ''
    clip = ''
    selected = False
    for i in s:
        if i == '1' and not selected:  # a
            screen += 'a'
        elif i == '1' and selected:  # a
            screen = 'a'
            selected = False
        elif i == '2' and selected and screen:  # ctrl-c
            clip = screen
        elif i == '3' and selected and screen:  # ctrl-x
            clip = screen
            screen = ''
            selected = False
        elif i == '4' and selected:  # ctrl-v
            screen = clip
            selected = False
        elif i == '4' and not selected:  # ctrl-v
            screen += clip
        elif i == '5' and screen:  # ctrl-a
            selected = True
    return len(screen)


print(screen_end("11515244"))
全部评论
#include <iostream> #include <cstring> using namespace std; int main() { string t = "";//剪切板 string s = "";//屏幕 string str; cin >> str; int len = str.size(), f = 0; //f表示是否被全选中 for(int i = 0; i < len; i++) { if(str[i]=='1'&&!f) s+="a"; else if(str[i]=='1'&&f) { s="a"; f = 0; } else if(str[i]=='2'&&f&&s.size()!=0) { t = s; } else if(str[i]=='3'&&f&&s.size()!=0) { t = s; s = ""; f = 0; } else if(str[i]=='4'&&!f) { s+=t; } else if(str[i]=='4'&&f) { s=t; f = 0; } else if(str[i]=='5'&&s.size()!=0) { f = 1; } } cout << s.size(); } </cstring></iostream>
2 回复 分享
发布于 2024-02-19 17:46 河北
import java.util.Scanner; public class FiveKeyboard { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 1 1 1 String screen = ""; // 屏幕上的英文 String selected = ""; // 所选的英文 String paste = ""; // 剪切板的英文 while (sc.hasNext()) { int l = sc.nextInt(); if (l == 1) { // a if (selected.length() == 0) { screen = screen.concat("a"); } else { screen = screen.replace(selected, "a"); selected = ""; } } else if (l == 2) { // ctrl-c if (selected.length() > 0) { paste = selected; } } else if (l == 3) { // ctrl-x if (selected.length() > 0) { paste = selected; screen = screen.replace(selected, ""); selected = ""; } } else if (l == 4) { // ctrl-v if (paste.length() == 0){ continue; } if (selected.length() > 0) { screen = screen.replace(selected, paste); selected = ""; } else { screen = screen.concat(paste); } } else if (l == 5) { // ctrl-a if (screen.length() > 0){ selected = screen; } } } System.out.print(screen.length()); } }
1 回复 分享
发布于 02-24 23:24 北京
package com.forza; import java.util.Scanner; public class KeysInput { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s = in.nextLine(); // 分别代表屏幕总字数、选择的字数、剪切板中的字数 int total = 0, selectCount = 0, clipboardCount = 0; // 是否选择了字符 boolean isSelect = false; for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == '1') { // a if (isSelect) { total -= selectCount; isSelect = false; } total ++; } else if (s.charAt(i) == '2') { // ctrl + c if (isSelect) { clipboardCount = selectCount; } } else if (s.charAt(i) == '3') { // ctrl + x if (isSelect) { total -= selectCount; clipboardCount = selectCount; isSelect = false; } } else if (s.charAt(i) == '4') { // ctrl + v total += clipboardCount; if (isSelect) { total -= selectCount; isSelect = false; } } else if (s.charAt(i) == '5') { // ctrl + a selectCount = total; isSelect = true; } } System.out.println(total); } }
点赞 回复 分享
发布于 07-11 17:10 四川
java实现,主要是那四条限制,需要在每种情况下额外判断或者额外处理: public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] s = sc.nextLine().split(" "); int a2 = 0;// 剪切板上的字母数 int a4 = 0;// 当前屏幕上的字母数 int a5 = 0;// 选中的字母数 for (String s1 : s) { switch (Integer.parseInt(s1)) { // a键在屏幕上输出一个字母 a case 1: a4 = a4 - a5; a5 = 0; a4++; System.out.println("此时剪切板上的字母数为:" + a2); System.out.println("当前屏幕上的字母数为:" + a4); System.out.println("选中的字母数为:" + a5); break; //ctrl-c将当前选择的字母复制到剪贴板; 新的内容被复制到剪贴板时会覆盖原来的内容 case 2: if (a5 != 0) { a2 = a5; } System.out.println("此时剪切板上的字母数为:" + a2); System.out.println("当前屏幕上的字母数为:" + a4); System.out.println("选中的字母数为:" + a5); break; //ctrl-x将当前选择的 字母复制到剪贴板,并清空选择的字母; 新的内容被复制到剪贴板时会覆盖原来的内容 case 3: if (a5 != 0) { a2 = a5; a5 = 0; } System.out.println("此时剪切板上的字母数为:" + a2); System.out.println("当前屏幕上的字母数为:" + a4); System.out.println("选中的字母数为:" + a5); break; //ctrl-v将当前剪贴板里的字母输出到屏幕; case 4: a4 = a4 - a5; a5 = 0; a4 += a2; System.out.println("此时剪切板上的字母数为:" + a2); System.out.println("当前屏幕上的字母数为:" + a4); System.out.println("选中的字母数为:" + a5); break; //ctrl-a 选择当前屏幕上所有字母。 case 5: if (a4 != 0) { a5 = a4; } break; } } System.out.println(a4); }
点赞 回复 分享
发布于 2024-07-29 04:44 河北
python的: def f(): s = input().strip() pm = [] jtb = '' selected = False for c in s: if c == '1': if selected: pm = ['a'] selected = False else: pm.append('a') elif c == '2' and pm and selected: jtb = ''.join(pm) elif c == '3'and pm and selected: selected = False pm = [] jtb = ''.join(pm) elif c == '4': if selected: pm = jtb.split() selected = False else: pm += jtb.split() elif c == '5' and pm: selected = True return len(pm) print(f())
点赞 回复 分享
发布于 2024-07-13 09:46 辽宁
// 12345代表 a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键的输入 function inputToNum(str) { const arr = str.split('') let res = '' let board = '' let selected = '' arr.forEach(x => { if(x == '1') { if(selected) { res = 'a' }else { res += 'a' } }else if(x == '2') { // 选择复制,将选中的内容添加到粘贴板 selected && (board = selected) }else if(x == '3') { // 选择剪切时,选择的内容清空,添加到粘贴板上 if(selected) { board = selected; selected = ''; res = ''; } }else if(x == '4') { // 进行粘贴时,选择的内容晴空,添加粘贴的内容 selected = '' res += board }else if(x == '5') { selected = res } }) return res.length }
点赞 回复 分享
发布于 2024-06-30 18:52 广东
import java.util.Objects; import java.util.Scanner; public class test6 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] input = sc.nextLine().split(""); String res = solution(input); System.out.println(res.length()); } private static String solution(String[] s){ String screen = ""; boolean selected = false; String select = ""; String copy = ""; for (int i = 0; i < s.length; i++) { if("1".equals(s[i])){//输入a if (!selected) { screen += "a"; }else { screen = ""; screen += "a"; } } if("2".equals(s[i])){//复制 if(!selected){ continue; }else{ copy = select; } } if("3".equals(s[i])){//剪切 if(!selected){ continue; }else{ copy = select; screen = ""; } } if("4".equals(s[i])) {//粘贴 if (!selected) { screen += copy; }else { screen = ""; screen += copy; } } if("5".equals(s[i])){//全选 if(!selected){ continue; }else { selected = true; select = screen; } } } return screen; } }
点赞 回复 分享
发布于 2024-03-04 23:16 江苏
理解为字母可连续输入 不同动作之间用空格分开 function getStr(line){ let tokens=line.split(' '); let reg=/1+/; let h=-1; for(let i of tokens){ h++; if(i.match(reg)){ break; } }; //找到输入字符后的有效动作 let newStr=tokens.splice(h);//有效动作字符串 前面不存在1的都不算 console.log('待判断字符',newStr); //1 表示字母 2表示复制 3表示剪切(清空)4表示粘贴 5表示全选 let count=[]; let ctrlA=false; let clip=[]; for(let i of newStr){ if(i=='5'){ ctrlA=true; console.log('ctrlA'); }else if(i.match(reg)){ count.push(i); console.log('字符a',count); }else if(i=='2'&&ctrlA){//全选复制先将其放在剪贴板中,每次都会重新更新 clip=count; console.log('ctrlC剪切板',clip); console.log('ctrlC当前页面',count); }else if(i=='3'&&ctrlA){//全选剪切先将其放在剪贴板中,每次都会重新更新 clip=count; count=[]; console.log('ctrlX剪切板',clip); console.log('ctrlX当前页面',count); }else if(i=='4'&&clip.length!=0){ count=count.concat(clip); ctrlA=false; console.log('ctrlV粘贴剪切板',clip); console.log('ctrlV当前页面',count); } } console.log('最终结果',count); } getStr('111 5 2 3 1 4 3 11 1 5 2 4');
点赞 回复 分享
发布于 2023-08-14 12:22 湖北
通过解答,要么4的描述错了,要么答案错了.答案里 i == 1 and selected 里是清空屏幕,再输出a;i == 4 and selected 也是直接清空屏幕,再将剪贴板粘到屏幕.
点赞 回复 分享
发布于 2023-08-06 21:13 安徽
4、当有字母被选择时,a和ctrl-v这两个有输出功能的键会先清空选择的字母,再进行输出 这一行描述是不是错的?ctrl-v 和字母被选择没有关系吧?应该是清空剪切板的内容吧?
点赞 回复 分享
发布于 2023-07-02 10:30 北京
import java.math.BigInteger; import java.util.*; import java.util.stream.Collectors; public class test { public static void main(String[] args) { Scanner in = new Scanner(System.in); //12345代表 a,ctrl-c,ctrl-x,ctrl-v,ctrl-a 11515244 while (in.hasNext()){ String s = in.next(); int x = 0; int copycount = 0; boolean select = false; for (int i=0;i<s.length> 0){ select =true; } } System.out.println(x); } } }</s.length>
点赞 回复 分享
发布于 2023-03-11 22:01 天津
public void answer(String str){ String[] splitArr = str.split(""); List<integer> list = new ArrayList<>(); List<integer> tempList = new ArrayList<>(); boolean flag = false; for (String s : splitArr) { switch (s) { //a case "1": list.add(1); break; //ctrl c case "2": if (flag) { tempList = ctrlC(list); flag = false; } break; //ctrl x case "3": if (flag) { tempList = ctrlX(list); flag = false; } break; //ctrl v case "4": ctrlV(list, tempList); break; //ctrl a case "5": flag = ctrlA(); } } System.out.println(list.size()); } public boolean ctrlA(){ return true; } public List<integer> ctrlC(List<integer> list){ return new ArrayList<>(list); } public void ctrlV(List<integer> list, List<integer> cList){ list.addAll(cList); } public List<integer> ctrlX(List<integer> list){ List<integer> xList = new ArrayList<>(list); list.clear(); return xList; }</integer></integer></integer></integer></integer></integer></integer></integer></integer>
点赞 回复 分享
发布于 2022-11-30 17:42 陕西
function getNum(str) { let arr = str.split('') let result = [] let temp = [] let falg = false for (let i = 0; i < arr.length; i++) { if (arr[i] == 1) { if (falg) { result = [] result.push('a') } else { result.push('a') } falg = false } else if (arr[i] == 2 && falg && result.length != 0) { temp = [...result] } else if (arr[i] == 3 && falg) { temp = [...result] result = [] } else if (arr[i] == 4) { if (falg) { result = [] result = [...temp] } else { result = [...result, ...temp] } falg = false } else if (arr[i] == 5) { falg = true } } console.log(result.length) } getNum('11152141')
点赞 回复 分享
发布于 2022-11-03 15:04 四川
public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str; while ((str = br.readLine()) != null) { String[] input = str.split(" "); int count = 0;// 字母的数量 int checkedCount = 0;// 选中的字母数量 int copyCount = 0;// 已复制的字母数量 for (String s : input) { int order = Integer.parseInt(s); // 用数字 12345代表 a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键的输入 switch (order) { case 1: count++; break; case 2: copyCount = checkedCount; break; case 3: copyCount = checkedCount; count -= checkedCount; checkedCount = 0; break; case 4: if (copyCount != 0){ count -= checkedCount; checkedCount = 0; count += copyCount; } break; case 5: checkedCount = count; break; } } System.out.println(count); } }
点赞 回复 分享
发布于 2022-07-09 12:34
public class Main { public static void main(String[] args) { String input = "1 1 1 5 2 4 3 4 1 4 5 1"; //屏幕上的字 String screen = ""; boolean select = false; String clip = ""; String[] split = input.split(" "); for (int i = 0; i < split.length; i++) { int op = Integer.parseInt(split[i]); if (op == 1&&select) { screen ="a"; select=false; } else if (op == 1 && !select) { screen += "a"; } else if (op == 2 && select) { clip=screen; } else if (op == 3 && select) { clip = screen; screen = ""; select = false; } else if (op == 4 && select) { screen = clip; select = false; } else if (op == 4 && !select) { screen+=clip; } else if (op == 5) { clip = screen; select =true; } } System.out.println(screen.length());
点赞 回复 分享
发布于 2022-05-07 22:23

相关推荐

LXXXXd:有点杂,想搞自动化的话没必要把法律的经历写上去
点赞 评论 收藏
分享
评论
14
18
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务