假设我们有一个给定的整数X,我们必须找到最大值N,以使前N个自然数的总和不超过值X。
因此,如果输入为X = 7,则输出将为2,因为2是N的最大可能值,对于N = 3,级数之和将超过X = 7所以,1 ^ 2 + 2 ^ 2 + 3 ^ 2 = 1 + 4 + 9 = 14。
为了解决这个问题,我们将遵循以下步骤-
定义了一个函数sum_of_squares()。这将取N
RES:=(N *(N + 1)*(2 * N + 1))/ 6
返回资源
从主要方法中,执行以下操作-
低:= 1
高:= 100000
N:= 0
而低 - 高=,做
高:=中-1
N:=中
低:=中+ 1
中间:=(高+低)/ 2
如果sum_of_squares(MID) - = X,则
除此以外,
返回否
让我们看下面的实现以更好地理解-
def sum_of_squares(N): res = (N * (N + 1) * (2 * N + 1)) // 6 return res def get_max(X): low, high = 1, 100000 N = 0 while low <= high: mid = (high + low) // 2 if sum_of_squares(mid) <= X: N = mid low = mid + 1 else: high = mid - 1 return N X = 7 print(get_max(X))
7
输出结果
2