资讯专栏INFORMATION COLUMN

刷题时js的输入问题总结

Hancock_Xu / 2236人阅读

摘要:牛客网其中只支持单行输入赛码网注意,如果一行超过个字符,会被强制分行的,因此如果题目明确说明该行超过字符,请自行拼接当然,我们尽量不出这种题目。

刷题时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字符的该行字符串。
*/
牛客网示例

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

// 通过代码
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流接收到行结束符( 、 、 )时触发"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模式。所以每组数据的第一个一定是接下来要获取输入的行数,后面这部分相当于已知行数,只需要在上面的基础上添加获取行数逻辑即可。

示例题目

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/84837.html

相关文章

  • leetcode刷题:283.Move Zeroes(Easy)

    摘要:解法目的就是把一个数组中所有为的数移动到数组的尾部,并保证其他元素相对位置不变。要求是在原数组上修改,不要额外引入其他的数组尽量减少操作次数。在小游戏中,设置了和界面一致的二维数组,数组的每一位记录了一个数字。 地址:https://leetcode.com/problems/move-zeroes/ 应用场景说明 这个题是很Easy的一道题,它的应用场景是在我尝试写小游戏2048时,...

    ckllj 评论0 收藏0
  • 前端该如何准备数据结构和算法?

    摘要:很多前端同学在看到数据结构和算法后会有一定的抵触心理,或者尝试去练习,但是被难倒,从而放弃。本文选择的数据结构和算法的类别均是出现频率最高,以及应用最广的类别。面试这是非常现实的一点,也是很多前端学习数据结构和算法的原因。 一、导读 据我了解,前端程序员有相当一部分对数据结构和算法的基础概念都不是很清晰,这直接导致很多人在看到有关这部分的内容就会望而却步。 实际上,当你了解了数据结构和...

    simon_chen 评论0 收藏0
  • 为什么你学不会递归?刷题几个月,告别递归,谈谈我经验

    摘要:第一递归函数功能假设的功能是求第项的值,代码如下找出递归结束的条件显然,当或者我们可以轻易着知道结果。定义递归函数功能假设函数的功能是反转但链表,其中表示链表的头节点。可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! 可能也有一大部分人知道递归,也能看的懂递归,但在实际做题过程中,却不知道怎么...

    Achilles 评论0 收藏0
  • 前端开发学习-网址记录

    摘要:不是一下子能看完综合使用编程是一番怎样的体验学习笔记网站前端开发基础算法题如何优雅地使用如何优雅地使用零度博客码农网伯乐在线什么是页面渲染国外先更到这,还有太多网址,先归类一下再补充。 最近在复习JavaScript知识时遇到以前就不懂的闭包、上下文,虽然比以前理解深了一点,但还是懵,想缓一下。。就去看了其他。。把Git、Grunt、Gulp、jQuery、jQuery UI、Reac...

    CatalpaFlat 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<