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