🌈 Scala 实现
题目描述:
- 有一个特殊的五键键盘,上面有A、Ctrl-C、Ctrl-X、Ctrl-V、Ctrl-A A键在屏幕上输出一个字母A,Ctrl-C将当前所选的字母复制到剪贴板,Ctrl-X将当前选择的字母复制到剪贴板并清空所选择的字母,Ctrl-V将当前剪贴板的字母输出到屏幕,Ctrl-A选择当前屏幕中所有字母
条件如下:
- 剪贴板初始为空
- 新的内容复制到剪贴板会覆盖原有内容
- 当屏幕中没有字母时,Ctrl-A无效
- 当没有选择字母时Ctrl-C、Ctrl-X无效
- 当有字母被选择时A和Ctrl-V这两个输出功能的键,会先清空所选的字母再进行输出
- 给定一系列键盘输入,输出最终屏幕上字母的数量
输入描述:
- 输入为一行
- 为简化解析用数字12345分别代替A、Ctrl-C、Ctrl-X、Ctrl-V、Ctrl-A的输入
- 数字用空格分割
输出描述:
- 输出一个数字为屏幕上字母的总数量
示例一
输入:
- 1 1 1
输出:
- 3
示例二
输入:
- 1 1 5 1 5 2 4 4
输出:
- 2
代码:
def main(args: Array[String]): Unit = {
val scan = new Scanner(System.in)
// 获取输入的内容
val line = scan.nextLine().split(" ")
// 释放资源
scan.close()
// 用于存放字母的总数量
var list = ListBuffer[Int]()
// 用于存放全选的内容
var check = ListBuffer[Int]()
// 剪贴板
var clipboard = ListBuffer[Int]()
// 遍历输入的内容
for (i <- 0 to line.length - 1) {
line(i) match {
// A 当有字母被选择时,会先清空所选的字母再进行输出
case "1" =>
if (!check.isEmpty) {
list --= list
check --= check
}
list += 1
println("1========A==========")
println(s"执行了A,当前的内容为:${list.toString()}")
// Ctrl-C 将当前所选的字母复制到剪贴板 当没有选择字母时无效
case "2" =>
clipboard --= clipboard
clipboard ++= check
check --= check
println("2========Ctrl-C==========")
println(s"执行了Ctrl-C,当前剪贴板的内容为:${clipboard.toString()}")
// Ctrl-X 新的内容复制到剪贴板会覆盖原有内容 将当前选择的字母复制到剪贴板并清空所选择的字母 当没有选择字母时无效
case "3" =>
clipboard --= clipboard
clipboard ++= check
println("3========Ctrl-X==========")
println(s"执行了Ctrl-X,当前剪贴板的内容为:${clipboard.toString()}")
list --= check
println(s"剩余的内容为:${list.toString()}")
// Ctrl-V 当有字母被选择时,会先清空所选的字母再进行输出 将当前剪贴板的字母输出到屏幕
case "4" =>
println("4========Ctrl-V==========")
println(s"此时剪贴板的内容为:${clipboard.toString()}")
if (!check.isEmpty) {
list --= list
check --= check
}
list ++= clipboard
println(s"执行了Ctrl-V,当前的内容为:${list.toString()}")
// Ctrl-A 当屏幕中没有字母时无效
case "5" =>
check -- check
check ++= list
println("5========Ctrl-A==========")
println(s"执行了Ctrl-A,所选的内容为:${check.toString()}")
}
}
println(s"最终结果为:${list.size}")
}
❤️ END ❤️