js的acm模式输入输出 Javascript(Node)

模版

js 复制代码
单行的输入输出
var readline = require('readline')
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
})
rl.on('line', function(line) {
  var arr= line.split(' ')
  console.log(parseInt(arr[0]) + parseInt(arr[1]));
})
多行的输入输出 复制代码
多行的输入输出
const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
const inputArr = [];//存放输入的数据
rl.on('line', function(line){
  //line是输入的每一行,为字符串格式
    inputArr.push(line.split(' '));//将输入流保存到inputArr中(注意为字符串数组)
}).on('close', function(){
    console.log(fun(inputArr))//调用函数并输出
})

//解决函数
function fun() {
	xxxxxxxx
	return xx
}
js 复制代码
const readline = require('readline');
-   借助 `require` 函数引入 Node.js 的 `readline` 模块,该模块可用于读取用户的输入。
接口 复制代码
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
-   调用 `readline.createInterface` 方法来创建一个 `readline` 接口实例 `rl`。
-   `input: process.stdin` 表明输入源是标准输入(也就是用户在控制台输入的内容)。
-   `output: process.stdout` 意味着输出目标是标准输出(也就是控制台
处理 复制代码
rl.on('line', function(line){
    inputArr.push(line.split(' '));
}).on('close', function(){
    console.log(fun(inputArr));
});
rl.on('line', ...)`:为 `rl` 实例添加一个 `line` 事件监听器。
每当用户输入一行数据并按下回车键时,这个监听器就会被触发。

line` 是用户输入的每一行数据,其类型为字符串。
line.split(' ')` 会把输入的一行字符串按空格分割成一个字符串数组。
inputArr.push(line.split(' '))` 会将分割后的数组添加到 `inputArr` 中。

rl.on('close', ...)`:为 `rl` 实例添加一个 `close` 事件监听器。当用户按下 `Ctrl + D` 结束输入时,这个监听器会被触发。
console.log(fun(inputArr))`:调用 `fun` 函数,将 `inputArr` 作为参数传入,然后把 `fun` 函数的返回值输出到控制台。

在 ACM 模式下使用 Node.js 进行输入输出时,有一些关键要点需要注意,以下为你详细介绍并说明如何处理输入数据。

注意要点

1. 输入输出方式
  • 输入 :ACM 模式通常要求从标准输入(stdin)读取数据。在 Node.js 里,可以使用 readline 模块来实现。
  • 输出 :需要将结果输出到标准输出(stdout),一般使用 console.log 方法。
2. 输入结束判断

要依据题目给定的输入格式,准确判断输入何时结束。有的题目会明确给出测试用例的数量,有的则通过特定的结束标志(如 EOF)来表示输入结束。

3. 数据类型转换

从标准输入读取的数据通常是字符串类型,若题目需要数值类型,就必须进行相应的转换,例如使用 parseIntNumber 函数。

4. 性能考虑

对于大规模输入数据,要留意代码的时间复杂度和空间复杂度,防止出现超时或内存溢出的问题。

输入数据处理方法

1. 单行输入

若题目仅要求输入一行数据,可使用 readline.question 方法。

javascript 复制代码
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.question('', (input) => {
    // 处理输入数据
    const data = input.split(' ').map(Number);
    console.log(data);
    rl.close();
});

在上述代码中,readline.question 用于读取一行输入,input.split(' ') 把输入按空格分割成数组,map(Number) 则将数组元素转换为数值类型。

2. 多行输入

若题目要求输入多行数据,可监听 line 事件,当输入结束时(如按下 Ctrl + D),触发 close 事件进行数据处理。

javascript 复制代码
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

const inputData = [];

rl.on('line', (line) => {
    inputData.push(line);
});

rl.on('close', () => {
    // 处理输入数据
    for (let i = 0; i < inputData.length; i++) {
        const data = inputData[i].split(' ').map(Number);
        console.log(data);
    }
});

在这段代码中,rl.on('line', ...) 监听每行输入,将其添加到 inputData 数组中。当输入结束时,rl.on('close', ...) 会遍历 inputData 数组,对每行数据进行处理。

3. 已知测试用例数量的输入

若题目明确给出测试用例的数量,可根据该数量读取相应的输入数据。

javascript 复制代码
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

const inputData = [];

rl.on('line', (line) => {
    inputData.push(line);
    if (inputData.length === 1) {
        const t = parseInt(inputData[0]);
        if (inputData.length === t + 1) {
            // 处理输入数据
            for (let i = 1; i <= t; i++) {
                const data = inputData[i].split(' ').map(Number);
                console.log(data);
            }
            rl.close();
        }
    }
});

在这个例子中,首先读取第一行数据,获取测试用例的数量 t,然后继续读取 t 行输入数据,最后对这些数据进行处理。

总结

在 ACM 模式下使用 Node.js 进行输入输出时,要根据题目要求选择合适的输入输出方式,准确判断输入结束条件,进行必要的数据类型转换,并注意代码的性能。通过监听 lineclose 事件,可以方便地处理多行输入数据。

参考:JavascriptACM模式输入输出JavascriptACM模式输入输出 在机试时往往都需要用ACM模式,也就是需要 - 掘金 (juejin.cn)

相关推荐
巴巴_羊17 分钟前
React Redux
开发语言·前端·javascript
Mintopia18 分钟前
Node.js 中的this
前端·javascript·node.js
Mike_jia19 分钟前
一篇文章带你了解一款强大的开源跨平台远程桌面管理工具---XPipe
前端·开源
._Ha!n.21 分钟前
React基础知识一
前端·react.js
Mintopia23 分钟前
深入理解 Three.js 中 Shader 的使用及示例
前端·javascript·three.js
睡觉zzz25 分钟前
React写ai聊天对话,如何实现聊天makedown输出转化
前端·人工智能·react.js
iOS阿玮26 分钟前
截止目前已有15.6w应用惨遭下架,你的应用还好么?
前端·app·apple
半旧51826 分钟前
【重构谷粒商城12】npm快速入门
前端·重构·npm
snakeshe101029 分钟前
剖析 React Commit 阶段:详解工作流程与三大核心模块
前端
爱生活的前端狗30 分钟前
一次大批量处理视频文件的性能优化记录
前端·javascript·vue.js