青训营X豆包MzrsCode技术训练营数组元素之和最小化 | 豆包MzrsCode AI刷题

52 阅读2分钟

小C希望构造一个包含n个元素的数组,且满足以下条件:

数组中的所有元素两两不同。 数组所有元素的最大公约数为 k。 数组元素之和尽可能小。 任务是输出该数组元素之和的最小值。

问题描述 小C希望构造一个包含 n 个元素的数组,且满足以下条件: 数组中的所有元素两两不同。 数组所有元素的最大公约数为 k。 数组元素之和尽可能小。 任务是输出该数组元素之和的最小值。 解题思路

  1. 理解题目要求 两两不同:数组中的每个元素必须是唯一的。 最大公约数为 k:数组中的每个元素都必须是 k 的倍数。 数组元素之和尽可能小:我们需要找到 n 个不同的 k 的倍数,使得它们的和最小。

  2. 选择合适的数组元素 为了满足最大公约数为 k,我们可以选择 k 的倍数。为了使数组元素之和最小,我们可以选择最小的 n 个不同的 k 的倍数。

  3. 具体步骤 生成 k 的倍数:从 k 开始,每次增加 k,直到找到 n 个不同的 k 的倍数。 计算这些倍数的和:将这些倍数相加,得到数组元素之和的最小值。 代码实现 public class Main { public static int solution(int n, int k) { // 初始化数组元素之和 int sum = 0; // 初始化当前的倍数 int currentMultiple = k;

     // 循环找到 n 个不同的 k 的倍数
     for (int i = 0; i < n; i++) {
         // 将当前倍数加入到和中
         sum += currentMultiple;
         // 找到下一个不同的倍数
         currentMultiple += k;
     }
     
     // 返回数组元素之和的最小值
     return sum;
    

    }

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

代码解释 初始化:我们初始化 sum 为 0,currentMultiple 为 k。 循环:我们通过循环找到 n 个不同的 k 的倍数,并将它们累加到 sum 中。 返回结果:最后返回 sum,即数组元素之和的最小值。 关键点总结 选择 k 的倍数:为了满足最大公约数为 k,数组中的每个元素都必须是 k 的倍数。 选择最小的 n 个不同的 k 的倍数:为了使数组元素之和最小,我们选择最小的 n 个不同的 k 的倍数。 累加和:将这些倍数相加,得到数组元素之和的最小值。 通过这种方式,我们可以确保数组中的元素两两不同,且最大公约数为 k,同时数组元素之和尽可能小。 注意 唯一性:确保数组中的元素两两不同。 最小和:选择最小的 n 个不同的 k 的倍数,以确保数组元素之和最小。