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

Beecrowd 1036 Bhaskara公式习题JavaScript代码错误排查

Beecrowd 1036 Bhaskara公式题代码排错

习题要求

读取3个浮点数,输出通过Bhaskara公式计算得到的方程根;如果因除零、对负数开平方导致无法计算根,输出消息Impossivel calcular。

  • 输入规则:读取3个双精度浮点数A、B、C
  • 输出规则:计算结果保留小数点后5位,无法计算时输出对应提示消息
    习题链接:Beecrowd 1036 题目地址

问题代码

const input = `10.0
20.1 
5.1`
// R1 = -0.29788
// R2 = -1.71212
/*
    0.0 20.0 5.0
// Impossivel calcular
    10.3 203.0 5.0
// R1 = -0.02466
// R2 = -19.68408
    10.0 3.0 5.0
// Impossivel calcular

    */

// var input = require('fs').readFileSync('/dev/stdin', 'utf8');
var lines = input.split('\n');

/**
 * Escreva a sua solução aqui
 * Code your solution here
 * Escriba su solución aquí
 */

let a = parseFloat(lines.shift());
let b = parseFloat(lines.shift());
let c = parseFloat(lines.shift());

let delta = b * b - 4 * a * c;



if (delta < 0 || a === 0 || delta === 0) {
  console.log("Impossivel calcular");
} else {
  let r1 = (-b + Math.sqrt(delta)) / (2 * a);
  let r2 = (-b - Math.sqrt(delta)) / (2 * a);
  console.log('R1 = ' + r1.toFixed(5));
  console.log('R2 = ' + r2.toFixed(5));
}

错误点说明

代码无法通过测试的核心原因是判断条件逻辑错误:

  • 错误将delta === 0纳入了无法计算的分支。根据一元二次方程求根规则,当delta等于0时,方程存在两个相等的实数根,属于可正常计算的场景,不应该输出错误提示。
  • 只有两种场景需要输出Impossivel calcular:一是a === 0,此时方程不是二次方程,求根时会出现除零错误;二是delta < 0,此时对负数开平方无法得到实数根。

修正方案

直接删除判断条件里的|| delta === 0即可,修正后的判断逻辑如下:

if (delta < 0 || a === 0) {
  console.log("Impossivel calcular");
} else {
  let r1 = (-b + Math.sqrt(delta)) / (2 * a);
  let r2 = (-b - Math.sqrt(delta)) / (2 * a);
  console.log('R1 = ' + r1.toFixed(5));
  console.log('R2 = ' + r2.toFixed(5));
}

测试验证:用注释里给出的样例输入10.0、20.1、5.1计算,delta值为200.01,代入公式得到的R1=-0.29788、R2=-1.71212,和预期结果完全一致,其余样例也可正常输出正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:09:20