สมมติว่าเรามีตัวเลขเริ่มต้นและสิ้นสุดหมายเลขอื่น (เริ่มต้น
- เพิ่มขึ้นทีละ 1
- คูณด้วย 2
ดังนั้น หากอินพุตเป็น start =5, end =11 ผลลัพธ์จะเป็น 2 เนื่องจากเราสามารถคูณ 2 ได้ 10 แล้วบวก 1 เพื่อให้ได้ 11
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ct:=0
- ขณะสิ้นสุด/2>=เริ่มทำ
- ถ้าสิ้นสุด mod 2 เหมือนกับ 1 แล้ว
- จบ :=จบ - 1
- จบ :=สิ้นสุด/2
- ct :=ct + 2
- มิฉะนั้น
- สิ้นสุด:=สิ้นสุด/2
- ct :=ct + 1
- ถ้าสิ้นสุด mod 2 เหมือนกับ 1 แล้ว
- ct :=ct +(end-start)
- คืนสินค้า
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, start, end): ct=0 while(end/2>=start): if end%2==1: end-=1 end=end/2 ct+=2 else: end=end/2 ct+=1 ct+=(end-start) return ct ob = Solution() print(ob.solve(5,11))
อินพุต
5,11
ผลลัพธ์
2