二分查找实现问题:求达标所需5分数量未通过全部测试
问题分析
你的代码核心逻辑方向正确,但浮点数精度问题导致极端大数值场景下的判断错误。当a、b、c达到1e15级别时,Python的双精度浮点数无法精确表示所有整数,会出现精度丢失——原本等于3.5的平均值可能被计算为略小于3.5,触发错误分支,最终得到错误结果。初始的提前判断也存在同样的精度隐患。
解决方案
将所有浮点数比较转换为整数运算,彻底避免精度损失。通过数学推导把不等式转换为整数形式:
要求 $\frac{2a + 3b + 4c + 5m}{a + b + c + m} \geq 3.5$
两边同时乘以 $2(a + b + c + m)$(分母为正,不等号方向不变),展开整理后得到整数不等式:
$2(2a + 3b + 4c + 5m) \geq 7(a + b + c + m)$
修正后的代码
def main(): a, b, c = int(input()), int(input()), int(input()) total = a + b + c current_sum = 2 * a + 3 * b + 4 * c # 提前判断是否已满足条件(整数运算) if 2 * current_sum >= 7 * total: print(0) return l = 0 r = a + b + c + 1 # 足够大的上界 while l <= r: mid = (l + r) // 2 # 用整数运算替代浮点数比较 if 2 * (current_sum + 5 * mid) >= 7 * (total + mid): r = mid - 1 else: l = mid + 1 print(l) main()
关键改进点
- 全部使用整数运算,彻底消除浮点数精度误差。
- 提前计算
total和current_sum,避免重复计算,提升效率。 - 保留二分法的高效性,同时确保判断逻辑的绝对准确。
内容的提问来源于stack exchange,提问作者perfect05
相关产品推荐
相关产品推荐

