赛码网牛客在acm模式下利用node.js处理多行输入方法

embedded/2024/9/24 21:22:01/

赛码网在JS Node的语言下,acm模式的默认标准输入输出代码是这样的:

const readline = require('readline');const rl = readline.createInterface({input: process.stdin,output: process.stdout
});
rl.on('line', function (line) {const tokens = line.split(' ');console.log(parseInt(tokens[0]) + parseInt(tokens[1]));
});

输入:1 1
返回值:2

单行还好,如果是碰到多行就要转化一下

多行输入

var readline = require('readline');
const rl = readline.createInterface({input: process.stdin,output: process.stdout
});// 初始化一个数组来存储输入的每一行数据
let lines = [];function changeNum(arr) {return arr.map(item => {// 检查当前项是否为数组,如果是,则递归调用该函数if (Array.isArray(item)) {return changeNum(item);} else {// 将字符串转换为数字return Number(item);}});
}
rl.on('line', function (line) {// 去除每行首尾的空格,然后按空格分割每一行lines.push(line.trim().split(' '));if(lines.length===5){//有几行写多少,5只是针对5行输入lines=changeNum(lines)//书写自己代码的逻辑console.log(lines); 
}});

代码解释:
这段代码使用了Node.js的readline模块来从标准输入读取数据。下面是对代码的逐行分析:

  1. var readline = require('readline'); - 这行代码引入了Node.js的readline模块,该模块允许程序从标准输入读取数据。

  2. const rl = readline.createInterface({ ... }); - 这行代码创建了一个readline.Interface对象,它配置了readline模块以从标准输入(process.stdin)读取数据,并将输出发送到标准输出(process.stdout)。

  3. let lines = []; - 声明一个变量lines,用来存储从标准输入读取的每一行数据。

  4. function changeNum(arr) { ... } - 定义了一个名为changeNum的函数,它接受一个数组arr作为参数。这个函数的目的是将数组中的所有字符串元素转换为数字。

  5. return arr.map(item => { ... }); - 使用map函数遍历数组arr中的每个元素。对于每个元素,执行以下操作:

    • if (Array.isArray(item)) { ... } - 如果元素item是一个数组,递归调用changeNum函数以处理嵌套数组。

    • return Number(item); - 如果元素item不是数组,使用Number函数将其转换为数字。

  6. rl.on('line', function (line) { ... }); - 为readline接口添加一个事件监听器,当接收到一行输入时触发。这个事件监听器做了以下事情:

    • lines.push(line.trim().split(' ')); - 读取一行输入,去除首尾的空格,然后使用空格作为分隔符将其分割成数组,并添加到lines数组中。

    • if(lines.length===5){ ... } - 当lines数组的长度达到5时,执行以下操作:

      • lines=changeNum(lines); - 调用changeNum函数,将lines数组中的所有字符串元素转换为数字。

      • console.log(lines); - 打印转换后的lines数组。

这段代码的主要目的是从标准输入读取数据,每读取5行数据后,将这些数据中的字符串转换为数字,并打印转换后的数组。这可能是为了处理某种格式的输入数据,例如,每5行数据表示一个记录,需要将这些记录中的数字字符串转换为实际的数字类型。

输入:

1
2 3
3
4 5
5

输出:[ [ 1 ], [ 2, 3 ], [ 3 ], [ 4, 5 ], [ 5 ] ]
之后就按数组每一项计算

注意:
如果不使用changeNum转化,得到的数据是

[ [ '1' ], [ '2', '3' ], [ '3' ], [ '4', '5' ], [ '5' ] ]

http://www.ppmy.cn/embedded/105794.html

相关文章

动态IP会被共享吗?

在探讨“动态IP是否会被共享”这一问题时,我们首先需要明确几个核心概念,包括动态IP、静态IP以及IP共享的基本概念。 动态IP与静态IP 动态IP(Dynamic IP)与静态IP(Static IP)是两种常见的IP地址分配方式。…

Excel中让第一行始终显示

要在Excel中让第一行始终显示,你可以使用冻结窗格功能。具体步骤如下: 打开需要设置第一行一直显示的工作表。将光标定位在工作表内任意一个单元格内。选择“视图”菜单,单击工具栏中的“冻结窗格”命令。在弹出的下拉菜单中选择“冻结首行”…

2024自动化测试面试真题(附答案)!

一、编程语法题 1 、 python 有哪些数据类型 python 数据类型有很多,基本数据类型有整型(数字)、字符串、元组、列表、字典和布尔类型等 2 、怎么将两个字典合并 调用字典的 update 方法,合并 2 个字典。 3 、 json.l python 如…

QNN:基于QNN+example重构之后的yolov8det部署

QNN是高通发布的神经网络推理引擎,是SNPE的升级版,其主要功能是: 完成从Pytorch/TensorFlow/Keras/Onnx等神经网络框架到高通计算平台的模型转换; 完成模型的低比特量化(int8),使其能够运行在高…

【日常记录-Linux】.tar.xz、.tar.bz2、tar.gz解压

Author:赵志乾 Date:2024-08-30 Declaration:All Right Reserved!!! 1. 简介 Linux平台下,常见.tar.xz、.tar.bz2、.tar.gz等类型的压缩包。 2. 解压缩说明 2.1 .tar.xz解压缩 .tar.xz压缩包表…

Vue 组件自定义插槽:实现灵活的内容分发

在 Vue.js 中,插槽(Slot)是一种特殊的语法,允许你在组件内部预留一些位置,以便在使用组件时插入自定义内容。自定义插槽为组件的复用和扩展提供了极大的灵活性。本文将介绍 Vue 组件自定义插槽的概念、用法及实际应用案…

c++开源库安装

Linux常用库安装 本项目包含: (1)开源库:libboostlibcurlhiredisjsoncpplog4cplus (2)数据库:mysqlredis (3)应用:nginxgithub地址:https://git…

JavaScript面向对象小挑战

// 编码挑战 #4 /* 重新创建挑战 #3,但这次使用 ES6 类:为 “CarCl ”类创建一个 “EVCl ”子类将 “charge ”属性设为私有; 实现对该类的 “accelerate ”和 “chargeBattery ”方法进行链式处理的功能,同时更新 “CarCl ”类…