สมมติว่าเรามีจำนวนเต็มบวก n เราต้องหาความยาวของลำดับ Collatz เนื่องจาก weknow ลำดับ Collatz ถูกสร้างขึ้นตามลำดับโดยที่ n =n/2 เมื่อ n เป็นอย่างอื่น n =3n+ 1 และลำดับนี้จะสิ้นสุดลงเมื่อ n =1
ดังนั้น หากอินพุตเป็น n =13 เอาต์พุตจะเป็น 10 เป็น [13, 40, 20, 10, 5, 16, 8, 4, 2, 1] ตามลำดับ
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ถ้า num เท่ากับ 0 แล้ว
- คืน 0
- ความยาว :=1
- ในขณะที่ num ไม่เหมือนกับ 1 ให้ทำ
- num :=(num / 2) เมื่อ num mod 2 เป็น 0 มิฉะนั้น (3 * num + 1)
- ยาว :=ยาว + 1
- ความยาวคืน
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, num): if num == 0: return 0 length = 1 while num != 1: num = (num / 2) if num % 2 == 0 else (3 * num + 1) length += 1 return length ob = Solution() print(ob.solve(13))
อินพุต
13
ผลลัพธ์
10