Bootstrap

ACM模式JavaScript 输入输出


参考链接

OJ在线编程常见输入输出练习

1. JavaScript(V8)

V8主要是用readline()来读取输入,但是需要注意的是readline得到的是字符串,有时可能需要转换成数值,用parseInt()或者 .map(Number)

//split()方法用于把一个字符串分割成字符串数组。
//"123 4567 89".split(' ')  返回["123","456","78"]
//parseInt() 函数可解析一个字符串,并返回一个整数
//.map(Number)可以直接将字符串数组变为数字数组


// 1. 单行输入
while(line=readline()){
    var lines = line.split(' ')//字符串转成字符数组
    //var lines = line.split(' ').map(Number);  
   
    var a = parseInt(lines[0]);
    var b = parseInt(lines[1]);
    print(a+b);
}


// 2. 多行输入
// 2.1 第一行是输入行数N,接下来的N行每行均有输入
let n = parseInt(readline())
var inputs = []  //用数组inputs来存放输入
while(line = readline()){
    line = parseInt(line)
    inputs.push(line)
}
var res = new Set(inputs);
//多行输出
Array.from(res).sort((a,b)=>a-b).forEach(item=>console.log(item))

//2.2 输入结果是矩阵
//第一行为两个整数,分别表示二维数组的行数和列数。再输入相应的数组。
//矩阵的输入
while (line = readline()) {
    let nums = line.split(' ')//读取第一行
    var row = +nums[0]//第一行的第一个数为行数
    var col = +nums[1]//第一行的第二个数为列数
    var map = []//用于存放矩阵
    for (let i = 0; i < row; i++) {
        map.push([]);
        let mapline = readline().split(' ');
        for (let j = 0; j < col; j++) {
            map[i][j] = +mapline[j];
        }
    }
}

2. Javascript(Node)
//split()方法用于把一个字符串分割成字符串数组。
//"123 4567 89".split(' ')  返回["123","456","78"]
//parseInt() 函数可解析一个字符串,并返回一个整数
//.map(Number)可以直接将字符串数组变为数字数组


// 1. 单行输入
var readline = require('readline');
const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
});
rl.on('line', function(line){
   //line为输入的单行字符串,split函数--通过空格将该行数据转换为数组。
   var tokens = line.split(' ')
   //数组arr的每一项都是字符串格式,如果我们需要整型,则需要parseInt将其转换为数字
   console.log(parseInt(tokens[0]) + parseInt(tokens[1]))
   //打印数组每个元素
   for(let i=0; i<tokens.length; i++){
        console.log(tokens[i])
   }
});


// 2. 多行输入
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
}

第一题 a + b(单行输入)
输入
1 5
10 20
输出
6
30

//V8普通形式
while(line=readline()){
    var lines = line.split(' ');  //字符串转换为字符数组
    var a = parseInt(lines[0]);
    var b = parseInt(lines[1]);
    print(a+b);
}

//V8函数形式
while(line=readline()){
    var lines = line.split(' ').map(Number)
    var a = lines[0]
    var b = lines[1]
    function add(a,b){
        return a+b
    }
    console.log(add(a,b))
}

//node
var readline = require('readline');
const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
});

rl.on('line', function(line){
   var arr = line.split(' ').map(Number)
   let a=arr[0]
   let b=arr[1]
   function sum(a,b){
       return a+b
   }
    console.log(sum(a,b))
});

第二题 a + b(第一行是输入的行数)
输入
2
1 5
10 20
输出 
6
30

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

let num=0
rl.on('line', function(line){
    if(num==0){
        num=parseInt(line) //num的值就变成第一行的值
    }else{
        let [x,y]=line.split(" ").map(Number)
        console.log(x+y)
    }
  
})
第三题 a + b(多行输入)

在这里插入图片描述

//解法1
var readline = require('readline');
const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
});
rl.on('line', function(line){
    let [x,y]=line.split(" ").map(Number)
    if(x==0 && y==0) return
    console.log(x+y)
})

//解法2
var readline = require('readline');
const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
});
rl.on('line', function(line){
    if(line=='0 0'){
        rl.close
    }else{
          let [x,y]=line.split(" ").map(Number)
          console.log(x+y)
    }
})
第四题

在这里插入图片描述

//解法1
const readline = require('readline');
const rl = readline.createInterface({
    input:process.stdin,
    output:process.stdout
});

rl.on('line', function(line){
    let arr = line.split(' ').map(Number)
    if(arr[0] == 0) return
    //slice方法截取数组并返回新数组,(start,end)end可选,start必须选
    //arr.slice(1)表示从下标1开始一直到末尾
    //reduce方法计算数组元素相加后的总和
    console.log(arr.slice(1).reduce((p, v) => p + v));
})

//解法2
const readline = require('readline');
const rl = readline.createInterface({
    input:process.stdin,
    output:process.stdout
});
let arr=[]
rl.on('line', function(line){
    //把每行的输入都push到数组中
    //最终arr=[ [ 4, 1, 2, 3, 4 ], [ 5, 1, 2, 3, 4, 5 ], [ 0 ] ]
    arr.push(line.split(' ').map(Number))
})
rl.on('close',function(){
    for(let i = 0; i < arr.length; i++){
        if(arr[i][0]==0)break
        arr[i].shift()
        let sum = 0
        for(let num of arr[i]){
            sum += num
        }
        console.log(sum)
    }
})
第五题

在这里插入图片描述

const readline = require('readline');
const rl = readline.createInterface({
    input:process.stdin,
    output:process.stdout
});
let num=0
rl.on('line', function(line){
    if(num==0){
        num=parseInt(line) //num的值就变成第一行的值
    }else{
        let arr = line.split(' ').map(Number)
        console.log(arr.slice(1).reduce((p, v) => p + v));
    }
})
第六题

在这里插入图片描述

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

rl.on('line', function(line){
        let arr = line.split(' ').map(Number)
        console.log(arr.slice(1).reduce((p, v) => p + v))
})
第七题

在这里插入图片描述

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

rl.on('line', function(line){
        let arr = line.split(' ').map(Number)
        console.log(arr.reduce((p, v) => p + v))
})
字符串排序一

在这里插入图片描述

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
let n = 0
rl.on('line', function (line) {
    if(n == 0){
      n = parseInt(line)
    }else{
        let arr = line.split(' ');
        let str = arr.sort().join(' ')
        console.log(str);
    }
})
字符串排序二

在这里插入图片描述

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

rl.on('line', function (line) {
        let arr = line.split(' ');
        let str = arr.sort().join(' ')
        console.log(str);
})
字符串排序三

在这里插入图片描述

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

rl.on('line', function (line) {
        let arr = line.split(',');
        let str = arr.sort().join(',')
        console.log(str);
})

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;