Giả sử chúng ta có ba giá trị n, tổng và k. Bây giờ hãy xem xét một danh sách kích thước n có tổng bằng tổng và trong đó hiệu số tuyệt đối giữa bất kỳ hai phần tử liên tiếp nào nhiều nhất là 1. Chúng ta phải tìm giá trị lớn nhất tại chỉ mục k của danh sách đó.
Vì vậy, nếu đầu vào là n =5 tổng =15 k =3, thì đầu ra sẽ là 4, bởi vì một danh sách có thể có giống như [3,2,3,4,3], phần tử tối đa được tìm thấy ở chỉ mục 3 là 4.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- x:=0
- thực hiện lặp đi lặp lại những điều sau đây, thực hiện
- a:=k + 1
- s:=(x + x - a + 1) * tầng nếu a / 2
- a:=n - k
- s:=s + (x + x - a + 1) * tầng của a / 2
- s:=s - x
- nếu s> tổng, thì
- ra khỏi vòng lặp
- x:=x + 1
- trả về x - 1
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
def solve(n, total, k): x = 0 while 1: a = k + 1 s = (x + x - a + 1) * a // 2 a = n - k s += (x + x - a + 1) * a // 2 s -= x if s > total: break x += 1 return x - 1 n = 5 total = 15 k = 3 print(solve(n, total, k))
Đầu vào
5, 15, 3
Đầu ra
4