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
相关产品推荐
相关产品推荐

