牛客网专门用于练习输入输出的题目:OJ在线编程常见输入输出练习场
以下是在刷华为机试题库_在线编程+题解_牛客题霸_牛客网 (nowcoder.com) 时总结的几种常见输入输出问题,全部以 JavaScript Node 解题。
处理单行输入
输入一行,输出一行。 练习题: HJ12 字符串反转
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 截取字符串
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 名字的漂亮度
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 简单错误记录
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}`)
})
});