Giả sử có một dãy số từ 1 đến n. Lúc đầu, chúng ta đang ở vị trí 0, nhảy một bước để đến 1, sau đó nhảy hai bước để đạt được vị trí 3, sau đó nhảy ba vị trí để đạt được ở vị trí 6 và cứ tiếp tục như vậy. Chúng tôi phải kiểm tra xem nếu duy trì điều này, chúng tôi có thể đạt được ở vị trí thứ n hay không.
Vì vậy, nếu đầu vào là n =21, thì đầu ra sẽ là Đúng, vì 1 + 2 + 3 + 4 + 5 + 6 =21
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- j:=(1 + căn bậc hai của (1 + 8 * n)) / 2
- if | j - int một phần của j | <=0, rồi đến
- trả về True
- nếu không thì trả về False
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
from math import sqrt def solve(n): j=(1+sqrt(1+8*n))/2 if abs(j-int(j))<=0: return True else: return False n = 21 print(solve(n))
Đầu vào
21
Đầu ra
True