刷題時js的輸入問題總結


刷題時js的輸入問題總結
大部分來自於 http://www.cnblogs.com/floor/... 感謝解決燃眉之急 還有小部分是本身的整理和思考
目前常見平臺還不太支持ES6寫法
推薦js刷題平臺 https://www.codewars.com 這裏支持es6
還有疑惑的問題:
牛客網是有兩套編譯環境的,v8和node,下面這些能夠支持node方式,可是v8方式怎麼處理多行的輸入問題,還須要再找資料查一下。javascript


處理單行輸入問題

處理單行輸入比較簡單,一般刷題的網站都會給出說明,按照說明來編程通常不會有問題。下面列舉牛客網和賽碼網的說明。html

牛客網

  • 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字符的該行字符串。
*/

牛客網示例

示例題目地址,能夠自行嘗試一下java

![反序輸出](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)
})

補充內容:node

'line'事件git

每當input流接收到行結束符(\n 、\r、 \r\n)時觸發'line'事件,一般發生在用戶按下Enter鍵或者Return鍵。監聽器函數被調用時會帶上一個包含接收那一行輸入的字符串。若是不close,則不會中止對輸入的監聽。es6

處理多行輸入問題

已知輸入行數

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:校招季到了,複習的時候發現不少東西其實似懂非懂,仍是要把看過學過的東西真真正正本身動手敲一遍,給本身再講一遍才能夠。給本身攢人品~祝小夥伴們都順利~找到滿意的工做哈~

相關文章
相關標籤/搜索