前言

之前刷算法题都是用力扣。但是,力扣是核心代码模式,是不需要处理输入、输出的,只需要直接返回值就行。笔试、面试的时候,不一定是核心代码模式,也可能是ACM模式。如果没有了解过JavaScript的输入输出可能就寄了。下面是学习记录的两种JavaScript的ACM模式:V8模式Nodejs模式

V8模式

输出

console.log();

读取一行输入(read_line())

最多读取个字符,当还未达到1024个时如果遇到回车或结束符,提前结束。也有可能是readline()。牛客ACM模式就是readline()

最重要的一个输入方法,可以通过该方法得到所有情况的输入,后面讲的其他输入方法,有可能没有。比如牛客的ACM模式,使用后面的输入,都会报错:xxx is not defined

read_line()返回输入的一行,字符串形式。需要通过splitparseInt等方法来得到真正的输入。

练习
1. A+B(1)

img

1
2
3
4
5
6
7
let line
while(line = read_line()){
let nums = line.split(' ')
let a = +nums[0] //字符串转数字
let b = +nums[1]
console.log(a+b)
}
2. A+B(2)

img

1
2
3
4
5
6
7
8
let t
while(t = read_line()){
while(t--){
let line = read_line()
let [a,b] = line.split(' ').map(Number)
console.log(a+b)
}
}
3. A+B(4)

img

1
2
3
4
5
6
7
8
9
10
11
let line
while(line = read_line()){
let [n,...nums] = line.split(' ').map(Number)
if(n === 0)
break
let sum = 0
for(let num of nums){
sum + = num
}
console.log(sum)
}
. A+B(5)

img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
let t

while(t = +read_line()) {
while(t--) {
let [n, ...nums] = read_line().split(' ').map(Number)

let sum = 0;
for(let i = 0; i < n; i++) {
sum += nums[i]
}

console.log(sum)
}
}

Nodejs模式

Nodejs输入主要有三大步骤:

  1. 引入readline模块
  2. 调用readline.createInterface(),创建一个readline的接口实例
  3. 监听line事件,事件处理函数的参数就是输入的行
1
2
3
4
5
6
7
8
9
const readline = require('readline')

const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
rl.on('line', function (line) {
//enter your code
})
练习
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const readline = require('readline')

const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', function (line) {
let nums = line.split(' ')

if(nums) {

let a = +nums[0]
let b = +nums[1]

console.log(a + b)
}
});