天天看點

快遞運輸【Java】

快遞運輸【Java】

【題目描述】

一輛運送快遞的貨車,運送的快遞均放在大小不等的長方體快遞盒中,為了能夠裝載更多的快遞,同時不能讓貨車超載,需要計算最多能裝多少個快遞。

快遞的體積不受限制,快遞數最多1000個,貨車載重最大50000。

【輸入描述】

第一行輸入每個快遞的重量,用英文逗号分隔,如:5,10,2,11

第二行輸入貨車的載重量,如:20

不需要考慮異常輸入

【輸出描述】

輸出最多能裝多少個快遞,如:3

【示例一】

  • 輸入
    5,10,2,11
    20
               
  • 輸出
  • 說明

    貨車的載重量為20,最多隻能放三個快遞5、10、2,是以輸出3

【解題思路】

  1. 此題目的是盡可能的多裝在快遞個數,是以,小包裹優先裝載
  2. 升序排列,從小到大依次疊加。并與貨車載重量比較。沒疊加一次計算一個快遞

【代碼】

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

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String content = input.nextLine();
        int max = input.nextInt();
        String[] split = content.split(",");
        if (split.length == 0) {
            System.out.println(0);
            return;
        }
        int[] nums = new int[split.length];
        for (int i = 0; i < split.length; i++) {
            nums[i] = Integer.parseInt(split[i]);
        }
        Arrays.sort(nums);// 升序排列
        int count = deal(nums, max);
        System.out.println(count);
    }

    private static int deal(int[] nums, int max) {
        int sum = 0;
        int count = 0;
        for (int num : nums) {
            if (num + sum < max) { // 依次疊加判斷
                count++;// 統計個數
                sum += num;
            }
        }
        return count;
    }
}