糖果均匀分配问题| 豆包MarsCode AI刷题

72 阅读2分钟

问题描述

小M从商店买了两种糖果,第一种有 aa 个,第二种有 bb 个。现在她想要将这些糖果分给班上的 nn 个小朋友,分配需要遵循以下规则:

  1. 每个小朋友必须且只能得到一种糖果(不能同时得到两种糖果)
  2. 每个小朋友至少要得到一个糖果
  3. 每种糖果至少要分给一个小朋友
  4. 为了尽可能公平,小M希望分到糖果最少的小朋友能得到尽可能多的糖果

请你帮助小M计算:在满足上述所有条件的前提下,分到糖果最少的小朋友最多能得到多少个糖果?

输入格式

  • 输入包含三个整数 nn, aa, bb
  • 其中 nn 表示小朋友的数量,aa 和 bb 分别表示两种糖果的数量
  • 保证 1≤n≤1051≤n≤105,1≤a,b≤1051≤a,b≤105

输出格式

  • 输出一个整数,表示在最优分配方案下,得到糖果最少的小朋友能得到的最大糖果数
  • 如果无法按要求分配,输出 0

测试样例

样例1:

输入:n = 5, a = 2, b = 3
输出:1
解释:可以给 2 个小朋友每人分 1 个第一种糖果,给 3 个小朋友每人分 1 个第二种糖果

题目分析

  1. 最小糖果数量:每个小朋友至少要得到一个糖果,因此我们需要确保每种糖果至少分给一个小朋友。
  2. 最大化最少糖果数量:为了尽可能公平,我们希望分到糖果最少的小朋友能得到尽可能多的糖果。

解题思路

  1. 确定最大可能的糖果数量:我们可以分配的最大糖果数量是两种糖果数量的最小值,即 (min(a, b))。
  2. 逐步检查可行性:从最大可能的糖果数量开始,逐步减少,检查是否可以满足所有小朋友的需求。
  3. 计算可分配的糖果数量:对于每个可能的糖果数量 ,计算可以分配给小朋友的总数。如果总数大于或等于 (n),则更新结果。

详细解释

  1. 初始化最大糖果数量:maxCandies 设为 (min(a, b))。
  2. 循环检查:从 1 到 maxCandies,逐步检查每个可能的糖果数量 (i)。 3计算总数:对于每个 (i),计算可以分配的总糖果数 count。
  3. 更新结果:如果 count 大于或等于 (n),则更新结果 res 为当前的 (i)。

具体代码:

    public static int solution(int n, int a, int b) {
        int maxCandies = Math.min(a, b);
        int res = 0;
        for (int i = 1; i <= maxCandies; i++) {
            int count = a / i + b / i;
            if (count >= n) {
                res = i;
            }
        }
        return res;
    }

    public static void main(String[] args) {
        System.out.println(solution(5, 2, 3) == 1);
        System.out.println(solution(4, 7, 10) == 3);
        System.out.println(solution(3, 3, 3) == 1);
        System.out.println(solution(6, 4, 6) == 1);
        System.out.println(solution(8, 5, 7) == 1);
    }
}