牛客网输入输出问题(JavaScript Node)

3,791 阅读1分钟

牛客网专门用于练习输入输出的题目:OJ在线编程常见输入输出练习场

以下是在刷华为机试题库_在线编程+题解_牛客题霸_牛客网 (nowcoder.com) 时总结的几种常见输入输出问题,全部以 JavaScript Node 解题。

处理单行输入

输入一行,输出一行。 练习题: HJ12 字符串反转

image.png

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.on('line', function (line) {
    // 使用 console.log() 代替 return
    console.log(line.split('').reverse().join(''))
});

处理多行输入(行数明确)

这种类型的题目在描述中会确定几行为一组,需按组处理数据。 练习题:HJ46 截取字符串

image.png

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
// 应该输入的行数
let num = 2;
let inputs =[];
rl.on('line', function (line) {
    inputs.push(line);
    if(inputs.length === num){
        console.log(inputs[0].substr(0,parseInt(inputs[1])));
        // 处理完一组数据后需要清空 inputs,使其容纳下一组数据
        inputs = [];
    }
});

处理多行输入(行数可知)

这种类型题目往往第一行是接下来输入的行数 num ,即为 1+n 模式。 练习题:HJ45 名字的漂亮度

image.png

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
let num = 0;
let inputs = [];
rl.on('line', function (line) {
    if(num === 0){
        num = parseInt(line)
    }else{
        inputs.push(line.toLocaleLowerCase());
    }
    if(inputs.length === num){
        for(let item of inputs){
            let numArr = [];
            let filterArr = Array.from(new Set(item.split('')))
            for(let char of filterArr){
                numArr.push(item.split('').filter(a=>(a===char)).length) 
            }
            let lastArr = numArr.sort((a,b)=>(b-a));
            let sum = 0;
            for(let i=0;i<lastArr.length;i++){
                sum += lastArr[i]*(26-i)
            }
            console.log(sum)
            // 置空,开始下一组数据
            num = 0;
            inputs = [];
        }
    }
});

处理多行输入(行数不明确)

这种类型的题目需要所有输入结束后再对数据进行处理。

练习题:HJ19 简单错误记录

image.png

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let inputs = [];
let handleData = [];

rl.on('line', function (line) {
    if(!inputs.includes(line)){
        inputs.push(line);
        let arr = line.split('\\').slice(-1)[0].split(' ');
        if(arr[0].length>16){
            handleData.push(`${arr[0].slice(-16)} ${arr[1]}`);
        }else{
            handleData.push(`${arr[0]} ${arr[1]}`);
        }
    }
});
// 输入结束时,在 close 中对数据进行处理
rl.on('close', function () {
    let filterHandleData = Array.from(new Set(handleData));
    filterHandleData.slice(-8).forEach((item,index) => {
        let num = handleData.filter(data => data===item).length
        console.log(`${item} ${num}`)
    })
});