刷题时js的输入问题总结


刷题时js的输入问题总结
大部分来自于 http://www.cnblogs.com/floor/... 感谢解决燃眉之急 还有小部分是自己的整理和思考
目前常见平台还不太支持ES6写法
推荐js刷题平台 https://www.codewars.com 这里支持es6
还有疑惑的问题:
牛客网是有两套编译环境的,v8和node,下面这些可以支持node方式,但是v8方式怎么处理多行的输入问题,还需要再找资料查一下。


处理单行输入问题

处理单行输入比较简单,通常刷题的网站都会给出说明,按照说明来编程一般不会有问题。下面列举牛客网和赛码网的说明。

牛客网

  • V8
// 其中readline()只支持单行输入
while(line=readline()){
    var lines = line.split(' ');
    var a = parseInt(lines[0]);
    var b = parseInt(lines[1]);
    print(a+b);
}
  • Node
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]));
});

赛码网

var line;
while(line = read_line()){
    line = line.split(' ');
    print(parseInt(line[0]) + parseInt(line[1]));
}

//注意,如果一行超过1024个字符,会被强制分行的
//,因此如果题目明确说明该行超过1024字符,请自行拼接(当然,我们尽量不出这种题目)。
/*
var next = '';
var line;
while(line = read_line()){
    next += line;
}
next中就是超过1024字符的该行字符串。
*/

牛客网示例

示例题目地址,可以自行尝试一下

![反序输出](F:论文实习和论文资料mygitmygitexerciseimages反序输出.png)

// 通过代码
var readline = require('readline')
const rl = readline.createInterface({
    input:process.stdin,
    output:process.stdout
})

rl.on('line', function(line) {
    var res = line.split('').reverse().join('')
    console.log(res)
})

补充内容:

'line'事件

每当input流接收到行结束符(\n 、\r、 \r\n)时触发'line'事件,通常发生在用户按下Enter键或者Return键。监听器函数被调用时会带上一个包含接收那一行输入的字符串。如果不close,则不会停止对输入的监听。

处理多行输入问题

已知输入行数

line事件是每次换行时都会触发(前提是没有close),那么如果在已知行数的情况下,可以将输入push到临时数组中,直到一组数据全部push完成之后再对该数组做处理,到下一组时将该数组清空。

示例题目

图片描述

// 通过代码
var readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
})

var Num = 2
var inputs = []

rl.on('line', function(input) {
    inputs.push(input.trim())
  // 满足一组行数条件之后再进行数据的处理
    if(Num == inputs.length) {  
        var res = []
        var s1 = inputs[0].split('')
        var s2 = inputs[1].split('')
        var len = s1.length
        for (var i = 0; i < len; i++) {
            res.push(s1[i])
            res.push(s2[len - i - 1])
        }
        res = res.join('')
        console.log(res)
        inputs.length = 0
    }
})

输入行数不确定

这种类型题目大多是第一个输入为数据的组数,然后会输入这几组数据,即为1+n模式。所以每组数据的第一个一定是接下来要获取输入的行数,后面这部分相当于已知行数,只需要在上面的基础上添加获取行数逻辑即可。

示例题目

![中位数](F:论文实习和论文资料mygitmygitexerciseimages中位数.png)

// 通过代码
var readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
})

var num = 0
var inputs = []
rl.on('line', function(line) {
    if(num == 0) {
      // 这里其实Number也可以,但是这里只需要整数,所以直接用了parserInt
        num = parseInt(line.trim())
    } else {
        inputs.push(line.trim())
        if(num == inputs.length) {
            var res
            inputs.sort(function(a, b) {
                return a - b
            })
            if(num % 2) {
                res = inputs[(num - 1) / 2]
            } else {
              // 这里要注意转化一下  不然会拼接成字符串
                res = Math.floor((parseInt(inputs[num / 2]) + parseInt(inputs[num / 2 - 1]))  / 2)
            }

            console.log(res)
          // 不要忘记清空
            inputs.length = 0
            num = 0
        }
    }
})

ps:校招季到了,复习的时候发现很多东西其实似懂非懂,还是要把看过学过的东西真真正正自己动手敲一遍,给自己再讲一遍才可以。给自己攒人品~祝小伙伴们都顺利~找到满意的工作哈~

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值