You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js读取stdin处理HackerEarth Monk and rotation题提交失败求助

问题排查与修复方案

存在的核心问题

  • 多余输出:旋转步数模为0时,额外调用了console.log输出结果,最终main函数又会输出一次,导致重复输出不符合判题要求
  • 类型未转换:数组长度、旋转步数都是字符串类型,未显式转为数字,极端场景下会出现隐式转换错误
  • 空行/多余字符兼容差:未对每行做首尾去空处理,输入末尾空行、行首行尾空格都会导致解析错误
  • 循环逻辑冗余:遍历步长固定为1,处理完测试用例的参数行后,下一轮会遍历无意义的数组行,浪费性能且有概率触发异常
  • 测试用例数未使用:读取了首行的测试用例总数但未用于循环控制,输入结构异常时会出现多余处理

修复后的代码

process.stdin.resume();
process.stdin.setEncoding("utf-8");
var stdin_input = "";
 
process.stdin.on("data", function (input) {
    stdin_input += input;
});

process.stdin.on("end", function () {
    // 预处理输入:过滤空行、每行首尾去空
    let lines = stdin_input.split('\n').map(line => line.trim()).filter(line => line.length > 0);
    let inputArr = [];
    // 首行转数字作为测试用例总数
    const numberTestCase = parseInt(lines[0]);
    let i = 1;
    for (let caseIdx = 0; caseIdx < numberTestCase; caseIdx++) {
        // 读取当前测试用例的参数,显式转数字
        let [noOfElement, stepRotation] = lines[i].split(/\s+/).map(Number);
        i++;
        // 读取数组行
        let arrayData = lines[i].split(/\s+/);
        i++;
        // 计算实际旋转偏移
        let mod = stepRotation % noOfElement;
        if (mod !== 0) {
            let rotatedPart = arrayData.splice(-mod);
            inputArr.push(rotatedPart.concat(arrayData).join(' '));
        } else {
            inputArr.push(arrayData.join(' '));
        }
    }
    main(inputArr)
});

function main(input) {
    process.stdout.write(input.join("\n"));
}

关键改动说明

  • 新增输入预处理逻辑,兼容输入末尾空行、行首尾多余空格、行内多空格等常见格式问题
  • 改为按测试用例总数循环,手动控制输入行索引步进,逻辑更清晰不会出现重复/遗漏处理
  • 所有数值参数显式转换为数字,避免字符串隐式转换异常
  • 移除多余的console.log调用,所有输出统一通过main函数处理,避免重复输出

内容的提问来源于stack exchange,提问作者D555

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:36:04