使用javascript一樣可以做線上演算法程式設計

youou發表於2021-09-09

基於node的readline一樣可以使用標準流的輸入輸出

對於大學生在剛開始學習c ,c++, java的時候,寫著hello word的程式碼,然後在命令框中輸入輸出;

基於很多演算法的學習,在我短淺的認識中,身邊的同學都是使用 c, c++,甚至是java去寫;

很多演算法題目中的輸入描述和輸出描述

例如牛客網上的演算法題:

圖片描述


類似於這種的東西,在杭州acm的演算法題目也是。


訣竅------使用nodejs內建封裝好的readline模組;[kbd][/kbd]

1.readline 模組 【逐行讀取】

readline主要的功能是提供了一個可以從可讀流中讀取資料;

這裡可以對nodejs的進行深入研究

2.如何使用readline?

一個基本的例子:

// 引入readline模組

const readline = require('readline');

//建立readline介面例項

const option ={

input:process.stdin,

output:process.stdout,

prompt:'>>'

}

const  rl = readline.createInterface(option);

rl.question('你覺得js的這個模組怎麼樣?', (answer) => {

// 對答案進行處理

// 注意:log中的要使用  ``  而不是  '';

console.log(`你覺得:${answer}`);

// 關閉標準流

rl.close();

});


詳情可以點選我的github的

3.進一步擴充套件去應用

3.1例如做一個簡單的命令列介面;

// 來自官方例子實現的命令介面;

const readline = require('readline');

const rl = readline.createInterface({

input: process.stdin,

output: process.stdout,

prompt: 'input> '

});

// rl.prompt() 方法會在 output 流中新的一行寫入 readline.Interface 例項配置後的 prompt,用於為使用者提供一個可供輸入的新的位置。

rl.prompt();

// 'line'事件是 獲取使用者輸入的值直到按下【return / enter】 按鍵;n、r 或 rn

rl.on('line', (line) => {

// ob.trim()==>從字串中移除前導空格、尾隨空格和行終止符。

switch (line.trim()) {

case 'hello':

console.log('world!');

break;

default:

console.log(`你輸入的是:'${line.trim()}'`);

break;

}

rl.prompt();

}).on('close', () => {

console.log('再見!');

//推出標準流;

process.exit(0);

});


3.2類似於牛客網程式設計的例子;

這是一個單行讀取的demo

const readline = require('readline');

const fs = require('fs')

// 單行讀取;

const options={

input:process.stdin,

output:process.stdout

}

const rl = readline.createInterface(options);

// 單行讀取;

rl.on('line',function(line){

line.trim();

console.log(`你輸入的值(移除前導空格、尾隨空格和行終止符):${line.trim()}`)

})

這是一個多行讀取的demo

const readline = require('readline');

const fs = require('fs')

// 多行讀取;

const options={

input:process.stdin,

output:process.stdout

}

const rl = readline.createInterface(options);

// 多行讀取

// 多行處理的思路是:1.需要設定未開始讀取的行數標誌,並且如果開始讀取的第一行是n行的行數;

//                2.需要透過判斷是否已經到了設定的行數,若到了則只需在裡面處理相關的演算法邏輯;

var  n = -1;

var sum = (a,b)=>a+b;

var arr =[];

rl.on('line',function(line){

// 表示已經在讀取第一行的n行數;

if(n == -1){

// 型別轉換和去除首位空格和終止符;並把行數賦值給n;

n = parseInt(line.trim());

console.log('n:'+n)

}

else{

// 存入陣列;

arr.push(line.trim());

if(n == arr.length){

// 這裡是執行你要的程式碼;

//    var result = arr[1];

var result = sum(arr[0],arr[1]);

console.log("result:"+result)

//恢復沒讀取狀態;

arr.length=0;

n=-1;

}

}

})


來自在牛客網上線上程式設計的痛點,由於一開始在javascript使用演算法程式設計,不太懂得js的輸入輸出流,

做起來在這上面花了不少時間 - -!


原文:



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4729/viewspace-2810116/,如需轉載,請註明出處,否則將追究法律責任。

相關文章