한 노 타 문제 깊이 분석 (python 실현)
더 좋 은 읽 기 체험 은 이곳 을 방문 할 수 있다.
규칙.
a, b, c 세 개의 기둥 이 있 고 a 는 위 에서 아래로, 어 릴 때 부터 n 개의 접시 가 있 습 니 다.a 위의 모든 접 시 를 c 로 옮 기 고 한 번 에 한 접시 만 옮 길 수 있 으 며 큰 접 시 는 작은 접시 에 놓 을 수 없습니다.
방법.
먼저 a 위의 n - 1 접 시 를 b 로 옮 긴 다음 에 a 위의 마지막 접 시 를 c 로 옮 긴 다음 에 b 위의 모든 접 시 를 c 로 옮 깁 니 다.
코드 구현
def mov(n,a,b,c):
if n == 1:
# a , a c
print(a,'-->',c)
else:
# a n-1 b
mov(n-1,a,c,b)
# a c
mov(1,a,b,c)
# b (n-1 ) c
mov(n-1,b,a,c)
num = abs(int(input(' :')))
print('
:')
mov(num,'A','B','C')
세 접시 의 실례
먼저 a 의 1 개 를 c 로 옮 긴 다음 에 a 의 마지막 1 개 를 b 로 옮 긴 다음 에 c 에 있 는 하나 만 b 로 옮 깁 니 다.
먼저 b 위의 하 나 를 a 로 옮 긴 다음 에 b 위의 마지막 하 나 를 c 로 옮 긴 다음 에 a 에 있 는 유일한 하 나 를 c 로 옮 깁 니 다.
즉:
A --> C A --> B C --> B A --> C B --> A B --> C A --> C
네 접시 의 실례
일단 a 에 있 는 2 개 를 c 로 옮 겨 주세요.
먼저 a 의 1 개 를 b 로 옮 긴 다음 에 a 의 마지막 1 개 를 c 로 옮 긴 다음 에 b 에 있 는 하나 만 c 로 옮 깁 니 다.
a 의 마지막 하 나 를 b 로 이동 합 니 다.
c 에 있 는 두 개 를 b 로 옮 겨 주세요.
먼저 c 의 하 나 를 a 로 옮 긴 다음 c 의 마지막 하 나 를 b 로 옮 긴 다음 에 a 에 있 는 유일한 하 나 를 b 로 옮 깁 니 다.
b 에 있 는 2 개 를 a 로 옮 겨 주세요.
b 에 있 는 1 개 를 c 로 옮 긴 다음 b 에 있 는 마지막 1 개 를 a 로 옮 긴 다음 c 에 있 는 1 개 를 a 로 옮 깁 니 다.
b 의 마지막 하 나 를 c 로 이동 합 니 다.
a 에 있 는 두 개 를 c 로 옮 겨 주세요.
먼저 a 의 하 나 를 b 로 이동 시 킨 다음 에 a 의 마지막 하 나 를 c 로 이동 시 킨 다음 에 b 에 있 는 하 나 를 c 로 이동 시 킵 니 다.
즉:
A --> B A --> C B --> C A --> B C --> A C --> B A --> B A --> C B --> C B --> A C --> A B --> C A --> B A --> C B --> C
이렇게 하면 이동 의 각 절 차 를 뚜렷하게 볼 수 있다.
총결산
다시 한 번 거꾸로 분석 해 보면 한 접 시 를 이동 할 때 한 걸음 이면 완성 할 수 있 고 코드 에 대응 하 는 것 이다.
if n == 1:
# a , a c
print(a,'-->',c)
접시 두 개 를 옮 길 때 는 세 걸음 이 걸 려 야 완성 할 수 있다.예 를 들 어 a 위의 두 접 시 를 c 로 이동 합 니 다.
세 접 시 를 옮 길 때 는 두 접 시 를 먼저 옮 기 고 한 접 시 를 옮 기 는 것 으로 분해 된다.네 개의 접 시 를 옮 길 때 세 개의 접 시 를 먼저 옮 기 고 한 접 시 를 옮 기 는 것 으로 분해 된다.순서대로 유추 하 다.
두 개 또는 두 개 이상 의 접 시 를 움 직 일 때 모두 세 걸음 이면 완성 할 수 있다 는 것 을 알 수 있다.그 중 한 걸음 한 걸음 은 접시 가 하나 남 을 때 까지 세 걸음 으로 나 눌 수 있다.코드 에 대응 하 는
else:
# a n-1 b
mov(n-1,a,c,b)
# a c
mov(1,a,b,c)
# b (n-1 ) c
mov(n-1,b,a,c)
그래서 한 노 타 문제, 알 겠 나?
참고: python 에서 한 노 타 실현
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.