最近參加了一些線上筆試。但是。。。我不是學計算機的,只會js不會c++,java,c(好吧都學過,不過忘了)。可怕的是我也沒學過nodejs,怎么 辦,怎么辦。node不就是用的js嗎?所以只用學會標准輸入輸出就可以解題的。下面總結幾種方法,可以當作解題模板,直接套就可以了。我是不是很善良,覺得我很善良的請關注我,我喜歡有比較多的粉絲。
一、處理單行輸入
這是一種最最簡單的輸入了。看我先給個模板:
var readline = require('readline'); rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('line', function(data) { // 獲取輸入 var inputs = data.trim().split(' '); // 處理 var result = deal(inputs); // 輸出結果 console.log(result); }); /** * [deal description] * @param {[type]} inputs [description] * @return {[type]} [description] */ function deal(inputs) { var result = ''; // dosomething return result; }
對了表示最原作者的感謝和尊重,這里給出原文地址:http://ankanglee.cc/2016/08/01/NodeJS-OJ%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA%E6%A8%A1%E6%9D%BF/。感謝你,是你讓我學會了如何正確處理輸入。
下面給出一個例子:
題目:
套模板:
var readline = require('readline'); rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('line', function(data) { // 獲取輸入 var inputs = data; // 處理 var result = deal(inputs); // 輸出結果 console.log(result); }); /** * [deal description] * @param {[type]} inputs [description] * @return {[type]} [description] */ function deal(inputs) { var result = inputs.split("").reverse().join(""); // dosomething return result; }javascript:void(0);
看看對沒對:
我擦,考研復試題怎么這么水啊。不過這不是重點,重點是你學會如何處理單行輸入了嗎?https://www.nowcoder.com/practice/171278d170c64d998ab342b3b40171bb?tpId=40&tqId=21336&tPage=1&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking,試試不就知道了嗎?
二、處理多行輸入(一組的行數已確定)
所謂多行輸入呢就是一組測試數據有多行。還是先給個模板,然后給個實例
var readline = require('readline'); rl = readline.createInterface({ input: process.stdin, output: process.stdout }); var K = 1; // 輸入K行(這里說一組有幾行就是幾) var inputs = []; rl.on('line', function(data) { // 獲取輸入 inputs.push(data.trim()); if (K == inputs.length) { // // 處理 var result = deal(inputs); // 輸出結果 console.log(result); // 清0 inputs.length = 0; } }); /** * [deal description] * @param {[type]} inputs [description] * @return {[type]} [description] */ function deal(inputs) { var result = ''; // dosomething return result; }
題目:
用模板做做看
var readline = require('readline'); rl = readline.createInterface({ input: process.stdin, output: process.stdout }); var K = 2; // 輸入K行 var inputs = []; rl.on('line', function(data) { // 獲取輸入 inputs.push(data.trim()); if (K == inputs.length) { // // 處理 var result = deal(inputs); // 輸出結果 console.log(result); // 清0 inputs.length = 0; } }); /** * [deal description] * @param {[type]} inputs [description] * @return {[type]} [description] */ function deal(inputs) { var result = []; // dosomething var s1 = inputs[0].split(""); var s2 = inputs[1].split(""); var len = s1.length; for(var i = 0;i<len;i++){ result.push(s1[i]); result.push(s2[len-i-1]); } return result.join(""); }
結果:
我去,考研題真的這么簡單嗎?好吧,我承認我找了半天才找到這個題,考研題很難的。https://www.nowcoder.com/practice/7f436c901a0d450ebdec1168e3e57cc2?tpId=40&tqId=21533&tPage=10&rp=5&ru=%2Fta%2Fkaoyan&qru=%2Fta%2Fkaoyan%2Fquestion-ranking;題目地址在這里,去測試去吧。
三、一組測試數據行數不確定(1+n模式)
啥意思呢?就是說一組測試數據的第一行是一個數字n,然后后面有n行,這1+n行就是一組測試數據。模板給上:
var readline = require('readline'); rl = readline.createInterface({ input: process.stdin, output: process.stdout }); var inputs = []; var num = 0; rl.on('line', function(data) { if(num == 0){ num = Number(data.trim()); } else { inputs.push(data.trim()); if (num == inputs.length) { // 處理 var result = deal(inputs); // 輸出結果 console.log(result); // 清0 inputs.length = 0; //不可改動 num = 0; //不可改動 } } }); /** * [deal description] * @param {[type]} inputs [description] * @return {[type]} [description] */ function deal(inputs) { var result = ''; // dosomething return result; }
題目:
套模板
var readline = require('readline'); rl = readline.createInterface({ input: process.stdin, output: process.stdout }); var inputs = []; var num = 0; rl.on('line', function(data) { if(num == 0){ num = Number(data.trim()); } else { inputs.push(data.trim()); if (num == inputs.length) { // 處理 var result = deal(inputs); // 輸出結果 console.log(result); // 清0 inputs.length = 0; //不可改動 num = 0; //不可改動 } } }); /** * [deal description] * @param {[type]} inputs [description] * @return {[type]} [description] */ function deal(inputs) { var result = 0; // dosomething var data = inputs.map(function(item){return parseInt(item.trim())}).sort(function(v1,v2){return v1-v2}); var len = data.length; if(len%2==0){ var l = len/2; result = Math.floor((data[l]+data[l-1])/2); }else{ var l = (len-1)/2; result = data[l] } return result; }
對了嗎?顯然的
哈哈,有趣吧。地址https://www.nowcoder.com/practice/2364ff2463984f09904170cf6f67f69a?tpId=40&tqId=21367&tPage=2&rp=1&ru=%2Fta%2Fkaoyan&qru=%2Fta%2Fkaoyan%2Fquestion-ranking,自己去體會吧。
四、總結
現在很多公司招聘都要線上筆試,如果說你是一個前端開發人員,而且不會java,c++等,那么你可以選擇js,選擇js的第一步是你要會處理數據,如果不會處理數據,無論你多么聰明,算法學得多好,js學得多好,對不起,筆試過不了。本人深受其害,所以決定研究一下這個東西,站在前人的肩膀上總結了上述方法,希望對你有所幫助。如果上面的內容對你有幫助的話,別忘了推薦一下,如果能關注一下我就更棒了。最后,祝你成功!
參考:http://ankanglee.cc/2016/08/01/NodeJS-OJ%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA%E6%A8%A1%E6%9D%BF/