问题描述
小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个不同的数。 - 为了使数组元素之和最小,我们可以从
k开始,依次选择k, 2k, 3k, ...,直到找到n个不同的数。 - 计算这些数的和并返回。
- 由于数组元素的最大公约数为
代码提示
java
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);
}
}
关键步骤解释
- 初始化:我们初始化
sum为 0,current为k。 - 循环:我们通过一个循环来找到
n个不同的数,每次将current加入sum,然后将current增加k。 - 返回结果:最后返回
sum。
代码解析
java
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);
}
}
代码结构
-
类定义:
public class Main:定义了一个名为Main的公共类。
-
方法定义:
public static int solution(int n, int k):定义了一个静态方法solution,接受两个整数参数n和k,并返回一个整数。
-
变量初始化:
int sum = 0;:初始化一个整数变量sum,用于存储数组元素之和,初始值为 0。int current = k;:初始化一个整数变量current,用于存储当前的数,初始值为k。
-
循环结构:
for (int i = 0; i < n; i++):使用for循环来找到n个不同的数。sum += current;:将当前的数current加入到sum中。current += k;:将current增加k,以找到下一个不同的数。
-
返回结果:
return sum;:返回数组元素之和。
-
主方法:
public static void main(String[] args):定义了程序的入口点。System.out.println(solution(3, 1) == 6);:调用solution方法并打印结果是否等于 6。System.out.println(solution(2, 2) == 6);:调用solution方法并打印结果是否等于 6。System.out.println(solution(4, 3) == 30);:调用solution方法并打印结果是否等于 30。
代码逻辑
-
初始化:
sum初始化为 0,用于存储数组元素之和。current初始化为k,用于存储当前的数。
-
循环:
-
通过
for循环,从0到n-1,每次循环中:- 将
current加入sum。 - 将
current增加k,以找到下一个不同的数。
- 将
-
-
返回结果:
- 循环结束后,返回
sum,即数组元素之和。
- 循环结束后,返回
测试样例
-
solution(3, 1):- 数组元素为
[1, 2, 3],和为6。
- 数组元素为
-
solution(2, 2):- 数组元素为
[2, 4],和为6。
- 数组元素为
-
solution(4, 3):- 数组元素为
[3, 6, 9, 12],和为30。
- 数组元素为