Giả sử chúng ta có một mảng gồm n giá trị thứ hai khác nhau. Chúng tôi phải kiểm tra xem liệu có thể bắt đầu từ đồng hồ 12'O và quay trở lại 12 bằng cách chỉ cộng hoặc trừ số giây đã cho hay không. Chúng tôi có thể sử dụng tất cả các giây đã cho chính xác một lần, chúng tôi có thể cộng hoặc trừ số giây.
Vì vậy, nếu đầu vào giống như seconds =[40,90,50], thì đầu ra sẽ là True vì nó có thể cộng 40 rồi trừ đi 90 rồi lại cộng 50.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- size:=2 ^ (độ dài của mảng giây)
- đối với c trong phạm vi từ 0 đến kích thước - 1, thực hiện
- thêm:=0
- đối với j trong phạm vi 0 đến kích thước giây - 1, thực hiện
- nếu c AND (2 ^ j) khác 0, thì
- thêm:=thêm + giây [j]
- nếu không,
- thêm:=thêm - giây [j]
- nếu c AND (2 ^ j) khác 0, thì
- nếu phép cộng chia hết cho (24 * 60) thì
- trả về True
- trả về Sai
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
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))
Đầu vào
[40,90,50]
Đầu ra
True