Amal과 Bimal이 게임을 하고 있다고 가정합니다. 숫자 n이 있고 2의 거듭제곱인지 확인합니다. 맞으면 2로 나눕니다. 그렇지 않으면 2의 거듭제곱인 다음 낮은 숫자로 줄입니다. 누가 1로 줄이면 게임에서 이기게 됩니다. Amal은 항상 게임을 시작하고 우리는 승자의 이름을 찾아야 합니다.
따라서 입력이 n =19와 같으면 출력은 Amal이 됩니다. 19는 2의 거듭제곱이 아니므로 Amal은 이를 16으로 줄이고 Bimal은 2로 나누어 8을 만든 다음 다시 Amal을 2로 나누어 다음을 얻습니다. 4, Bimal이 2로 만들고 마지막으로 Amal이 나누어 1로 만들고 게임에서 이깁니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- res :=0
- n> 1일 때 수행
- b :=1
- b * 2
- b :=b * 2
- n :=n - b
- res :=res + 1
- '아말' 반환
- 'Bmal' 반환
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
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))
입력
19
출력
Amal