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. 数据类型转换

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

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 进行输入输出时,要根据题目要求选择合适的输入输出方式,准确判断输入结束条件,进行必要的数据类型转换,并注意代码的性能。通过监听 line 和 close 事件,可以方便地处理多行输入数据。

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

相关推荐
福兮说8 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
郑州光合科技余经理9 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
小呆呆6669 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
Dovis(誓平步青云)10 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan10 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_11 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒11 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技11 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
yivifu12 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub
默_笙13 小时前
🛴 从散件到整机:DeepAgents 与 Agent 身上预留的那些"插槽"(前置介绍)
前端·javascript