ACM需要自己定义输入和输出,针对js来说,有两种模式读取输入和打印输出,v8和node

js(V8)

使用 V8模式,主要使用 readline()读取每一行。
本质上输入的都是字符串,需要转化为数字。
同时也要注意不同的输入方式需要不同的处理。

输入

注意输入和split后每个元素都是string,所以如果输入的是数字或者Number数组,需要转化数字。

一行输入一个int数字

用readline读取一行,然后转化为int。

ParseInt(readline())

1 单行输入 一行为一个一维数组

输入为1 2 3的形式

.map(Number)实际就是遍历数组每一项,转化为数字。记住这种写法,最简便。

let a=readline().split(' ').map(Number)
输入为123的形式

与上面的区别是split的参数不是空格而是’'。

let a=readline().split('').map(Number)

2 固定行数的多行输入

var line_1 = readline();
var line_2 = readline();
var result_1= line_1.split(' '); //获取第一行的内容,存为数组
var result_2= line_2.split(' '); //获取第二行的内容,存为数组
print(result_1,result_2);

3 任意的多行输入

while (line = readline()) {
    var lines = line.split(' ');
    var a = parseInt(lines[0]);
    var b = parseInt(lines[1]);
    print(a + b);
}

4 第一行是接下来输入数据的行数的多行输入

var n=parseInt(readline());
var ans=0
for(var i=0;i<n;i++){
  lines=readline().split(" ")
  for(var j=0;j<lines.length;j++){
    ans +=parseInt(lines[j])
  }
}
print(ans)

输出(数组输出为输入类似的形式)

其余输出较简单,这里仅记录几种特殊不同情况的输出处理。

数组输出为1,2,3

使用toString()方法,注意js的toString()转数组和其他语言不同,只是去掉括号,中间的数字和逗号都在。

let a=[1,2,3];
console.log(a.toString());

使用join() 方法把数组中的所有元素转换一个字符串。其中参数指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。

let a=[1,2,3];
console.log(a.join()); //或者a.join(',')

数组输出为1 2 3

使用join方法,指定空格为分隔符

let a=[1,2,3];
console.log(a.join(' '));

使用...扩展运算符

let a=[1,2,3];
console.log(...a);

数组输出为123

使用join方法

let a=[1,2,3];
console.log(a.join(''));

js(Node)

要用require(‘readline’)来引入输入的值
直接用console.log就可以输出

1 单行输入

var readline = require('readline');
const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
});
rl.on('line', function(line){
   var tokens = line.split(' ');   //获取第一行内容,存为数组
    console.log(parseInt(tokens[0]) + parseInt(tokens[1]));
});

2 固定行数的多行输入

var readline = require('readline');
    const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
 
//固定行数的多行输入 
const lines = [];
var num=3; //设定输入行数
var rows=[]; //用于存储每行的输入
 
rl.on('line',function(data){
    rows.push(data); //将每次输入的行数据存入
    if(num === rows.length){ //输入的行数等于num值
        console.log(rows); //输出结果
    }
});

3 第一行是接下来输入数据的行数的多行输入

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
 
var k = -1; //初始化行数为-1,表示还未开始
var rows = []; //用于存储每行的输入
 
rl.on('line',function(data){
    if(k === -1){
        k = parseInt(data.trim()); //读取第一行,获取接下来输入的行数
    }else{
        rows.push(data.trim()); //将每次输入的行数据存入
        if(k === rows.length){ //当输入的行数等于设定的k值时,开始逻辑处理
            console.log(rows); //输出结果
        }
    }
});

//处理输入,保存到数组inputArr中
const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
const inputArr = [];
rl.on('line', function(line){
    inputArr.push(parseInt(line));//将输入流转换为数字类型保存到inputArr中
}).on('close', function(){
    console.log(findMinNum(inputArr[0]));//调用解决函数并输出
})

//解决函数
function findMinNum(n) {
	xxxxxxxx
	return xx
}