华为OD机试真题 JavaScript 实现打印机队列2023 Q1 | 100分

Posted MISAYAONE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为OD机试真题 JavaScript 实现打印机队列2023 Q1 | 100分相关的知识,希望对你有一定的参考价值。

   所有题目均有四种语言实现。C++ 实现目录Python实现目录Java实现目录JavaScript实现目录

题目

题目描述

有5台打印机打印文件,每台打印机有自己的待打印队列。因为打印的文件内容有轻重缓急之分,

所以队列中的文件有1~10不同的代先级,其中数字越大优先级越高

打印机会从自己的待打印队列中选择优先级最高的文件来打印。

如果存在两个优先级一样的文件,则选择最早进入队列的那个文件。

现在请你来模拟这5台打印机的打印过程。

输入描述

每个输入包含1个测试用例,每个测试用例第一行给出发生事件的数量N(0 < N < 1000)。
接下来有 N 行,分别表示发生的事件。
共有如下两种事件:
1. “IN P NUM”,表示有一个拥有优先级 NUM 的文件放到了打印机 P 的待打印队列中。(0< P <= 5, 0 < NUM <= 10);
2. “OUT P”,表示打印机 P 进行了一次文件打印,同时该文件从待打印队列中取出。(0 < P <= 5)。

输出描述

对于每个测试用例,每次”OUT P”事件,请在一行中输出文件的编号
如果此时没有文件可以打印,请输出”NULL“。
文件的编号定义为”IN P NUM”事件发生第 x 次,此处待打印文件的编号为x。编号从1开始。

示例1   输入输出示例仅供调试,后台判断数据一般不包含示例

输入

7
IN 1 1
IN 1 2
IN 1 3
IN 2 1
OUT 1
OUT 2
OUT 2

输出

3
4
NULL

思路

1:考察的重点是数据结构+排序

JS输入输出

javascript 本身有两种模式:V8 和 Node,两种模式在输入上略有不同。

Node:

let readline = require("readline");
 
const rl = readline.createInterface(
  input: process.stdin,
  output: process.stdout,
);

rl.on('line', function(line)
    // line表示的就是输入的一行
    let lines = line.split(' ').map(Number);
);

V8:

//假设输入为:
4
5
1 2

// readline() 就表示输入的一行,和python中的 input()函数用法基本一致
let n = readline().split('').map(item=>parseInt(item));  // 4
let k = readline().split(' ').map(item=>parseInt(item)); // 5
let [nums] = readline().split(' ').map(item=>parseInt(item)); // 1 2

具体我也是参考了网上的博主的文章:ACM模式下JavaScript(js)的输入输出 V8 Node_我先润了的博客-CSDN博客

ACM格式javascript 输入输出 - 衣囧~ - 博客园 (cnblogs.com)

不熟悉的可以自行查阅。

这里给出这位博主的总结:

        node.js=V8+内置基本模块,相当于java中的JRE=JVM+java标准库

        node就是带有能操作IO和网络库的V8引擎,提供了很多可调用的API使得JavaScript能够读写文件,网络请求,系统信息等操作。对V8引擎进行了封装,执行JavaScript的速度更快,性能更好。

Code

//JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。
function main(input_strs) 
    opreations = input_strs.map((str) => str.split(" "))
    var print_machines = 
 
    let taskId = 1
    opreations.forEach((task) => 
        var [type, printId, priority] = task
    
        if (type === "IN") 
            var arr = [taskId, priority]
            if (!print_machines[printId]) 
                print_machines[printId] = []
            
            print_machines[printId].push(arr)
            print_machines[printId].sort((a, b) => b[1] - a[1])
            taskId++
         else 
            var arr = print_machines[printId].shift()
            console.log(arr ? arr[0] : "NULL")
        
    )


 
main(["IN 1 1",
"IN 1 2",
"IN 1 3",
"IN 2 1",
"OUT 1",
"OUT 2",
"OUT 2"])

要求

时间限制:C/C++ 1秒,其他语言 2秒

空间限制:C/C++262144K,其他语言524288K

64bit IO Format:%lld

语言限定:
C(clang11), C++(clang++11), Pascal(fpc 3.0.2), Java(javac 1.8), Python2(2.7.3), 
php(7.4.7), C#(mcs5.4), ObjC(gcc 5.4), Pythen3(3.9), JavaScript Node(12.18.2), JavaScript V8(6.0.0),
Sqlite(3.7.9), R(4.0.3), Go(1.14.4), Ruby(2.7.1), Swift(5.3), matlab(Octave 5.2), Pypy2(pypy2.7.13),
Pypy3(pypy3.6.1), Rust(1.44), Scala(2.11.12), Kotlin(1.4.10), Groovy(3.0.6), TypeScript(4.1.2), mysql(8.0)

以上是关于华为OD机试真题 JavaScript 实现打印机队列2023 Q1 | 100分的主要内容,如果未能解决你的问题,请参考以下文章

华为OD机试真题 Python 实现数字反转打印

华为OD机试真题 JS 实现预订酒店2023 Q1 | 100分

华为OD机试真题 JavaScript 实现最大利润2023 Q1 | 100分

华为OD机试真题 JavaScript 实现最大利润2023 Q1 | 100分

华为OD机试真题 JavaScript 实现日志限流2023 Q1 | 100分

华为OD机试真题 JavaScript 实现字符串解密2023 Q1 | 100分