Giả sử Amal và Bimal đang chơi một trò chơi. Họ có một số n và họ kiểm tra xem nó có phải là lũy thừa của 2 hay không. Nếu đúng, họ chia nó cho 2. ngược lại, họ giảm nó cho số thấp hơn tiếp theo cũng là lũy thừa của 2. Ai giảm số xuống 1 sẽ thắng trò chơi. Amal luôn bắt đầu trò chơi, sau đó chúng ta phải tìm ra tên của người chiến thắng.
Vì vậy, nếu đầu vào là n =19, thì đầu ra sẽ là Amal vì 19 không phải là lũy thừa của 2, vì vậy Amal giảm nó xuống 16, sau đó Bimal chia cho 2 để tạo ra 8, sau đó một lần nữa Amal chia cho 2 để có được 4, sau đó Bimal tạo thành 2 và cuối cùng Amal chia thành 1 và thắng trò chơi.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- res:=0
- while n> 1, do
- b:=1
- while b * 2
- b:=b * 2
- n:=n - b
- res:=res + 1
- trả về 'Amal'
- trả về 'Bmal'
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
def solve(n): res = 0 while(n > 1): b = 1 while(b * 2 < n): b *= 2 n -= b res += 1 if res % 2 == 0: return 'Amal' else: return 'Bmal' n = 19 print(solve(n))
Đầu vào
19
Đầu ra
Amal