สมมติว่าเรามีอาร์เรย์ของค่าวินาทีที่แตกต่างกัน n ค่า เราต้องตรวจสอบว่าเป็นไปได้หรือไม่ที่จะเริ่มต้นจากนาฬิกา 12'O และกลับไปที่ 12 โดยการเพิ่มหรือลบเฉพาะวินาทีที่กำหนดเท่านั้น เราสามารถใช้วินาทีที่กำหนดทั้งหมดได้เพียงครั้งเดียว เราสามารถเพิ่มหรือลบได้
ดังนั้น หากอินพุตเป็นวินาที =[40,90,50] ผลลัพธ์จะเป็น True เนื่องจากบวกได้ 40 แล้วลบ 90 แล้วจึงบวก 50 อีกครั้ง
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ขนาด :=2^(ความยาวของอาร์เรย์วินาที)
- สำหรับ c ในช่วง 0 ถึงขนาด - 1 ทำ
- เพิ่ม :=0
- สำหรับ j ในช่วง 0 ถึงขนาดวินาที - 1 ทำ
- ถ้า c AND (2^j) ไม่ใช่ศูนย์ ดังนั้น
- เพิ่ม :=เพิ่ม + วินาที[j]
- มิฉะนั้น
- เพิ่ม :=เพิ่ม - วินาที[j]
- ถ้า c AND (2^j) ไม่ใช่ศูนย์ ดังนั้น
- ถ้าบวกหารด้วย (24 * 60) ลงตัว
- คืนค่า True
- คืนค่าเท็จ
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(seconds): size = 2**len(seconds) for c in range(size): add = 0 for j in range(len(seconds)) : if c & (1 << j): add += seconds[j] else: add -= seconds[j] if add % (24 * 60) == 0: return True return False seconds = [40,90,50] print(solve(seconds))
อินพุต
[40,90,50]
ผลลัพธ์
True