刷題時js的輸入問題總結
大部分來自於 http://www.cnblogs.com/floor/... 感謝解決燃眉之急 還有小部分是本身的整理和思考
目前常見平臺還不太支持ES6寫法
推薦js刷題平臺 https://www.codewars.com 這裏支持es6
還有疑惑的問題:
牛客網是有兩套編譯環境的,v8和node,下面這些能夠支持node方式,可是v8方式怎麼處理多行的輸入問題,還須要再找資料查一下。javascript
處理單行輸入比較簡單,一般刷題的網站都會給出說明,按照說明來編程通常不會有問題。下面列舉牛客網和賽碼網的說明。html
// 其中readline()只支持單行輸入 while(line=readline()){ var lines = line.split(' '); var a = parseInt(lines[0]); var b = parseInt(lines[1]); print(a+b); }
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
// 經過代碼 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模式。因此每組數據的第一個必定是接下來要獲取輸入的行數,後面這部分至關於已知行數,只須要在上面的基礎上添加獲取行數邏輯便可。函數
示例題目網站
// 經過代碼 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:校招季到了,複習的時候發現不少東西其實似懂非懂,仍是要把看過學過的東西真真正正本身動手敲一遍,給本身再講一遍才能夠。給本身攢人品~祝小夥伴們都順利~找到滿意的工做哈~