Giả sử chúng ta có một số nguyên X cho trước, chúng ta phải tìm giá trị lớn nhất N sao cho tổng của N số tự nhiên đầu tiên không được vượt quá giá trị X.
Vì vậy, nếu đầu vào là X =7, thì đầu ra sẽ là 2 vì 2 là giá trị lớn nhất có thể có của N, với N =3, tổng của chuỗi sẽ vượt quá X =7 Vì vậy, 1 ^ 2 + 2 ^ 2 + 3 ^ 2 =1 + 4 + 9 =14.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
Định nghĩa một hàm sum_of_squares (). Điều này sẽ mất N
-
res:=(N * (N + 1) * (2 * N + 1)) / 6
-
trả lại res
-
Từ phương thức chính, thực hiện như sau -
-
thấp:=1
-
cao:=100000
-
N:=0
-
trong khi thấp - =cao, thực hiện
-
giữa:=(cao + thấp) / 2
-
nếu sum_of_squares (giữa) - =X, thì
-
N:=mid
-
thấp:=mid + 1
-
-
nếu không,
-
cao:=mid - 1
-
-
-
trả về N
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
def sum_of_squares (N):res =(N * (N + 1) * (2 * N + 1)) // 6 return resdef get_max (X):low, high =1, 100000 N =0 khi low <=high:mid =(high + low) // 2 if sum_of_squares (mid) <=X:N =mid low =mid + 1 else:high =mid - 1 return NX =7print (get_max (X))Đầu vào
7Đầu ra
2