สมมติว่ามีเส้นจำนวนตั้งแต่ 1 ถึง n ตอนแรกเราอยู่ที่ตำแหน่ง 0 กระโดดหนึ่งก้าวเพื่อไป 1 จากนั้นกระโดดสองตำแหน่งไปถึงตำแหน่งที่ 3 จากนั้นกระโดดสามตำแหน่งเพื่อไปถึงที่ 6 เป็นต้น เราต้องเช็คก่อนว่าจะรักษาไว้ได้ถึงตำแหน่ง n หรือเปล่า
ดังนั้น หากอินพุตเป็น n =21 ผลลัพธ์จะเป็น True เพราะ 1+2+3+4+5+6 =21
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- j:=(1 + สแควร์รูทของ (1+8*n)) / 2
- ถ้า |j - int ส่วนหนึ่งของ j| <=0 แล้ว
- คืนค่า True
- มิฉะนั้นจะคืนค่าเป็นเท็จ
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
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))
อินพุต
21
ผลลัพธ์
True