问题描述
小C希望构造一个包含n个元素的数组,且满足以下条件:
- 数组中的所有元素两两不同。
- 数组所有元素的最大公约数为
k
。 - 数组元素之和尽可能小。
任务是输出该数组元素之和的最小值。
测试样例
样例1:
输入:
n = 3 ,k = 1
输出:6
样例2:
输入:
n = 2 ,k = 2
输出:6
样例3:
输入:
n = 4 ,k = 3
输出:30
思路过程:1.数组中的所有元素两两不同,就是告诉所有元素都不一样。
2.数组所有元素的最大公约数为 k
,就是告诉所有整数共有约数中最大的一个就是K。
都能被整除,又要最小,那必然第一个元素就是这个最大公约数的本身,又因为都得被K整除,也必然是K的整数倍。
代码实现:
def solution(n: int, k: int) -> int:
# 初始化一个空数组
arr = []
# 将k添加到数组中
arr.append(k)
# 循环n次,每次将当前最大公约数加上k,并添加到数组中
for i in range(n - 1):
arr.append(arr[-1] + k)
# 返回数组之和
return sum(arr)
if __name__ == '__main__':
print(solution(n=3, k=1)) # 输出:6
print(solution(n=2, k=2)) # 输出:6
print(solution(n=4, k=3)) # 输出:30
思路过程
- 初始化:首先创建一个空列表
arr
用于存储结果。 - 添加初始值:将
k
作为第一个元素添加进列表arr
中。 - 构建数组:通过循环
n-1
次(因为已经添加了第一个元素),每次都将当前列表最后一个元素与k
相加的结果追加到列表中。 - 计算总和:使用 Python 内置函数
sum()
计算列表arr
中所有元素之和,并将其作为函数的返回值。
代码实现过程
-
arr = []
初始化一个空列表。 -
arr.append(k)
将k
作为首个元素添加至列表。 -
for i in range(n - 1):
开始一个循环,循环次数为n-1
,这是因为我们已经在列表中添加了第一个元素。arr.append(arr[-1] + k)
在每次循环中,获取列表中的最后一个元素(即arr[-1]
)然后加上k
,并将结果追加到列表尾部。
-
return sum(arr)
使用sum()
函数计算列表内所有数值的总和,并返回这个总和。
使用感受和问题
就是点击一个题目,如果再点击另一个题目,新开的窗口和现有的窗口题目会变得一致,而不是两个一样的题目,字节是为了我们专注一道题目的目的设计的吗?就是多开题目做不到,而且开多了不关会卡,在初始化进入之前启动速度有点慢,还有卡顿的现象,不过总体的刷题体验还是没问题的。