小c的数组

48 阅读2分钟

新日相关思考 如何完成先关问题 问题描述 小C希望构造一个包含n个元素的数组,且满足以下条件:

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

测试样例 样例1:

输入:n = 3 ,k = 1 输出:6

样例2:

输入:n = 2 ,k = 2 输出:6

样例3:

输入:n = 4 ,k = 3 输出:30

解题思路 首先,了解题目给定的要求:

最大公约数为 k: 这意味着所有的数组元素都必须是 k 的倍数。换句话说,我们可以先将数组元素构造为 k * m 这样的形式,其中 m 是一个正整数。

元素两两不同: 数组中的每个元素必须是不同的,因此 m 必须是不同的整数。

数组元素之和尽可能小: 我们需要在符合条件的情况下,尽量选择小的整数 m 来构造数组,从而使得数组的和尽可能小。

步骤: 对于给定的 n 和 k,我们需要构造一个数组,数组元素的形式是 k * m,其中 m 是从 1 开始的连续整数,确保元素之间不同。

所以,最小的 n 个满足条件的元素可以选择为:k * 1, k * 2, k * 3, ..., k * n。这样我们得到的数组是 [k1, k2, k3, ..., kn]。

数组元素的和就是这些元素的和,计算方式为:

57c315b7c3442ad0ce7acd9eb240429.jpg

57c315b7c3442ad0ce7acd9eb240429.jpg

根据等差数列求和公式,1 到 n 的和为:

因此,最终的数组元素之和为:

代码实现

解释 solution 函数接收两个参数:n 和 k,分别代表数组的元素个数和最大公约数。 首先计算从 1 到 n 的和(即 1 + 2 + 3 + ... + n),然后乘以 k 得到数组元素之和。 main 函数中,我们测试了三个示例用例,分别输出了是否符合预期结果。 复杂度分析 时间复杂度:计算 1 到 n 的和需要常数时间,因此整体时间复杂度为 O(1)。 空间复杂度:只用了常数空间,空间复杂度为 O(1)。 笔记算法数据结构c++