小C希望构造一个包含n个元素的数组,且满足以下条件:
- 数组中的所有元素两两不同。
- 数组所有元素的最大公约数为
k。 - 数组元素之和尽可能小。
任务是输出该数组元素之和的最小值。
测试样例
样例1:
输入:
n = 3 ,k = 1
输出:6
样例2:
输入:
n = 2 ,k = 2
输出:6
样例3:
输入:
n = 4 ,k = 3
输出:30
问题理解
我们需要构造一个包含 n 个元素的数组,满足以下条件:
- 数组中的所有元素两两不同。
- 数组所有元素的最大公约数为
k。 - 数组元素之和尽可能小。
解题思路
- 元素选择:为了满足最大公约数为
k,我们可以选择k的倍数作为数组元素。 - 最小和:为了使数组元素之和尽可能小,我们可以从最小的
k的倍数开始选择,直到选满n个元素。
代码
public class Main { public static int solution(int n, int k) { // 初始化数组和 int sum = 0; // 初始化当前元素 int current = k;
// 循环选择 n 个不同的元素
for (int i = 0; i < n; i++) {
// 将当前元素加入和
sum += current;
// 选择下一个元素,确保两两不同
current += 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);
}
}