在前端面试的ACM模式笔试中,输入参数的读取是核心技能之一,以下是常见场景的代码实现及注意事项:
一、JavaScript的两种输入模式
1. V8模式(浏览器环境/部分OJ平台)
• 核心方法:通过 read_line()
或 readline()
逐行读取输入,字符串需手动解析。
• 代码示例:
// 读取单行多个数字(如输入:"3 5 7")
let line = read_line();
let nums = line.split(' ').map(Number); // 转为数字数组 [3, 5, 7]
// 读取多行不定数量输入(如多组测试用例)
while ((line = read_line()) !== '') {
let [a, b] = line.split(' ').map(Number);
console.log(a + b);
}
适用场景:牛客网等平台。
2. Node.js模式
• 核心方法:使用 readline
模块逐行监听输入流。
• 代码示例:
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let lines = [];
rl.on('line', (line) => {
lines.push(line);
// 示例:读取两行后处理(第一行为n,第二行为n个数字)
if (lines.length === 2) {
const n = parseInt(lines[0]);
const nums = lines[1].split(' ').map(Number);
console.log(nums.reduce((a, b) => a + b, 0));
rl.close();
}
});
适用场景:赛码等需要手动处理输入结束的平台。
二、常见输入场景及处理
1. 单行固定参数
• 输入格式:例如 "5 10"
,表示两个整数。
• 处理代码:
const [a, b] = read_line().split(' ').map(Number);
2. 多行动态输入
• 输入格式:第一行为组数 t
,后续每行一组数据。
3
1 2
3 4
5 6
• 处理代码:
const t = parseInt(read_line());
for (let i = 0; i < t; i++) {
const [a, b] = read_line().split(' ').map(Number);
console.log(a + b);
}
3. 不定行输入(以特定条件结束)
• 输入格式:多行数据,以 0 0
结束。
2 3
4 5
0 0
• 处理代码:
while (true) {
const line = read_line();
const [a, b] = line.split(' ').map(Number);
if (a === 0 && b === 0) break;
console.log(a + b);
}
4. 复杂结构输入(如矩阵)
• 输入格式:第一行为矩阵维度 n m
,后续 n
行每行 m
个数字。
2 3
1 2 3
4 5 6
• 处理代码:
const [n, m] = read_line().split(' ').map(Number);
const matrix = [];
for (let i = 0; i < n; i++) {
matrix.push(read_line().split(' ').map(Number));
}
三、注意事项
- 类型转换:输入默认为字符串,需用
map(Number)
或parseInt
转为数字。 - 平台差异:部分平台(如牛客)输入结束不会触发额外事件,需提前判断终止条件。
- 性能优化:大量数据时避免频繁
console.log
,可缓存结果后统一输出。 - 错误处理:对输入格式做校验(如
if (nums.length !== n) throw error
)。
通过掌握这些模式,可以高效应对前端笔试中的输入处理难题。更多实战题目可参考专业刷题平台(如 bishipass.com)。