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

五数取四求和求最值Java代码未全通过,请求排查问题

问题分析与修复方案

你的代码逻辑本身是对的——通过总和减去最大数得到四个数的最小和,减去最小数得到最大和,但整数溢出导致了测试用例失败。

问题根源

Java中int类型的取值范围是-2^31到2^31-1(也就是-2147483648到2147483647)。你提供的测试用例五个数的总和是3467737930,远远超过了int的最大值,直接用int存储sum会发生溢出,导致sum变成错误的数值,后续计算的minSum和maxSum自然也就不对了。

修复后的代码

import java.util.Arrays;
import java.util.Scanner;

public class Solution {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        // 改用long数组兼容更大的数值范围
        long arr[] = new long[5];
        // sum用long类型存储,避免总和溢出
        long sum = 0;
        
        for(int i = 0; i < 5; i++) {
            arr[i] = sc.nextLong();
            sum += arr[i];
        }
        
        Arrays.sort(arr);
        // 最小和 = 总和 - 最大的数
        long minSum = sum - arr[4];
        // 最大和 = 总和 - 最小的数
        long maxSum = sum - arr[0];
        
        System.out.println(minSum + " " + maxSum);
    }
}

关键改动点

  • 将数组类型从int[]改为long[],同时用sc.nextLong()读取输入,确保单个数值即使接近long上限也能正确存储。
  • 将sum的类型从int改为long,保证五个数的总和不会溢出。
  • 原有的排序和计算逻辑保持不变,因为排序后的数组首尾元素依然是最小和最大值,减去它们就能得到正确的四个数的和。

用这个修复后的代码运行你提供的测试用例,就能得到预期的输出2572095760 2999145560了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:27:53