HackerRank三角形类型判定题SQL代码运行失败问题排查求助
错误原因排查
你代码的核心问题是CASE语句的判断顺序逻辑错误。
SQL的CASE语句会按从上到下的顺序匹配条件,只要命中第一个满足的条件就会直接返回结果,不会继续校验后续条件。你当前把「非三角形」的判断放在了「等腰三角形」判断的后面,会导致两边相等但不满足三角形构成规则的边长组合被错误判定为等腰三角形。
举个实际的错误场景:输入边长为2,2,5,按照你的代码逻辑:
- 首先判断是否等边:2≠5,不满足
- 接着判断是否存在两边相等:2=2,满足,直接返回
Isosceles - 根本不会走到后续的非三角形校验逻辑,但实际上
2+2<=5,这组边长属于非三角形,结果完全错误。
修正后的代码
把非三角形的判断提到等腰三角形判断之前即可,修正后代码如下:
SELECT CASE WHEN t.A = t.B AND t.B = t.C THEN 'Equilateral' WHEN t.A + t.B <= t.C OR t.B + t.C <= t.A OR t.C + t.A <= t.B THEN 'Not A Triangle' WHEN t.A = t.B OR t.B = t.C OR t.C = t.A THEN 'Isosceles' ELSE 'Scalene' END FROM TRIANGLES AS t;
(注:等边三角形的判断可以保留在最前面,因为三边相等的边长必然满足三角形构成规则,不会出现非三角形的情况)
内容的提问来源于stack exchange,提问作者user_12
相关产品推荐
相关产品推荐

