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

JavaScript计算五数取四求和的最值结果错误,求问题排查

四数求和的最小/最大值计算错误排查

需求说明

给定五个正整数,计算恰好取其中四个数求和得到的最小值和最大值,最终以空格分隔的两个长整数输出。

测试用例

  • 输入:7 69 2 221 8974
  • 预期输出:299 9271
  • 实际输出:299 9266

我的实现代码

function miniMaxSum(arr) {
    let panjang = arr.length,
        max = arr.slice(0, panjang-1),
        min = arr.slice(1, panjang),
        maxSum = max.reduce((total, item) => total+item),
        minSum = min.reduce((total, item) => total+item);      
    process.stdout.write(`${maxSum} ${minSum}`);    
}

问题根源

你的代码逻辑完全错误——你默认取前四个元素的和当最大值,后四个元素的和当最小值,但正确逻辑应该是:

  • 最大值 = 数组总和 - 数组中的最小元素(去掉最小的那个,剩下四个的和最大)
  • 最小值 = 数组总和 - 数组中的最大元素(去掉最大的那个,剩下四个的和最小)

拿测试输入的数组[7,69,2,221,8974]举例:

  • 你代码里的max是前四个元素[7,69,2,221],求和得到的299其实是去掉最大元素8974后的最小值,刚好蒙对了最小值;
  • 而min是后四个元素[69,2,221,8974],求和得到9266,这是去掉第一个元素7后的和,根本不是正确的最大值(正确最大值应该是去掉最小元素2后的和:7+69+221+8974=9271)。

修复后的代码

function miniMaxSum(arr) {
    const totalSum = arr.reduce((acc, num) => acc + num, 0);
    const smallestNum = Math.min(...arr);
    const largestNum = Math.max(...arr);
    const minSum = totalSum - largestNum;
    const maxSum = totalSum - smallestNum;
    process.stdout.write(`${minSum} ${maxSum}`);
}

这个版本先计算数组所有元素的总和,再减去最大元素得到四数最小和,减去最小元素得到四数最大和,完全符合需求逻辑,代入测试输入会得到正确的299 9271。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:06:27