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

数组最大商计算代码错误排查:输出15而非8的问题

数组最大商代码错误排查

问题回顾

给定N个整数的数组A,可以任意交换元素位置,要计算数组的最大商,规则是:

  • 先算数组所有元素的总和X;
  • 构造前缀和数组pre[],pre[i]是前i+1个元素的和(索引从0开始);
  • 数组商是把每个i从0到N-1的Math.floor(X/pre[i])加起来的总和。

样例输入是N=3,数组[1,1,3],正确输出应该是8,但你的JavaScript代码跑出来是15,问题出在这儿:

正确计算过程

先算总和X=1+1+3=5。要拿到最大商,得把数组升序排列(这样前缀和增长最慢,每个pre[i]尽可能小,对应的Math.floor(X/pre[i])就会尽可能大),这时前缀和数组是[1,2,5],加起来就是:
Math.floor(5/1) + Math.floor(5/2) + Math.floor(5/5) = 5 + 2 + 1 = 8,这就是正确结果。

错误原因分析

你输出的15正好是5*3,也就是X乘以数组长度,说明代码肯定犯了这个核心错误:

  • 根本没按规则构造前缀和数组,也没做Math.floor(X/pre[i])的计算,直接把结果写成了X乘以数组的长度;
  • 或者循环的时候,每次不是加Math.floor(X/pre[i]),而是直接加X,循环3次就得到5+5+5=15。

另外提一句,要是代码没给数组升序排序,最多是结果比8小,不会得到15,所以这不是这次输出错误的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:39:55