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

FizzBuzz代码在HackerRank测试全部失败,求排查

FizzBuzz问题排查与修复

核心错误分析

  • 判断对象错误:循环中始终用输入的n做取余判断,而非当前循环变量i。比如n=15时,循环会执行16次,每次都判断15是否是3和5的倍数,导致数组里重复添加FizzBuzz,完全不符合题目遍历1到n每个数的要求。
  • 全局数组未清空:results是全局变量,多次调用函数时会累积之前的结果,导致输出混乱。
  • 输入输出不符合HackerRank要求:HackerRank不支持prompt获取输入,需要通过标准输入读取;同时题目通常要求逐行输出结果,而非打印整个数组。

修正后的代码

function fizzBuzz(n) {
  const results = []; // 改为函数内局部变量,避免结果累积
  for (let i = 1; i <= n; i++) { // 从1开始,匹配题目1到n的范围要求
    if (i % 3 === 0 && i % 5 === 0) {
      results.push('FizzBuzz');
    } else if (i % 3 === 0) {
      results.push('Fizz');
    } else if (i % 5 === 0) {
      results.push('Buzz');
    } else {
      results.push(i.toString()); // 转为字符串,符合HackerRank输出格式
    }
  }
  // 逐行输出,适配HackerRank的输出要求
  results.forEach(item => console.log(item));
}

// HackerRank环境下的输入处理逻辑
function main() {
  const readline = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
  });
  readline.question('', (input) => {
    const n = parseInt(input.trim(), 10);
    fizzBuzz(n);
    readline.close();
  });
}

main();

关键修改说明

  • 把results改为函数内部局部变量,每次调用都会重新初始化,避免旧结果干扰。
  • 循环判断从n替换为当前循环变量i,确保每个数字都被正确检查。
  • 循环起始值从0改为1,匹配FizzBuzz题目的常规数字范围(1到n)。
  • 将数字转为字符串存入数组,符合HackerRank的输出格式要求。
  • 替换prompt为HackerRank支持的readline模块读取输入,同时改为逐行输出结果,而非打印整个数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:05:32