[Wikioi 3145] 한 노 타 게임
한 노 타 문 제 는 잘 알려 진 문제 다.A, B, C 세 개의 기둥 에 n 개의 서로 다른 크기 의 원반 (반경 이 각각 1 - n 이 라 고 가정 하 세 요) 이 있 습 니 다. 처음에 그들 은 모두 나의 A 위 에 접 었 습 니 다. (그림 에서 보 듯 이) 당신 의 목 표 는 최소 의 합 법 적 인 이동 단계 에서 모든 접 시 를 A 탑 에서 C 탑 으로 이동 하 는 것 입 니 다.
게임 의 모든 규칙 은 다음 과 같다.
1. 한 걸음 한 접시 만 움 직 일 수 있 습 니 다. (기둥 의 맨 위 에서 다른 기둥 의 맨 위로)
2. 이동 하 는 과정 에서 큰 접시 가 작은 접시 위 에 있 으 면 안 된다 는 것 을 보증 해 야 합 니 다. (작은 것 은 큰 위 에 놓 을 수 있 고 큰 접시 아래 에는 다른 크기 의 접시 가 있어 서 는 안 됩 니 다)
n = 3 의 경우 합 법 적 인 이동 시퀀스:
1 from A to C
2 from A to B
1 from C to B
3 from A to C
1 from B to A
2 from B to C
1 from A to C
최소 걸음 수의 이동 순 서 를 구하 기 위해 n 을 입력 하 십시오.
입력 설명 입력 설명
정수 n
출력 설명 출력 설명
첫 번 째 줄 의 정수 k 는 가장 적은 이동 걸음 수 를 나타 낸다.
다음 k 줄, 줄 마다 한 마디 씩 N from X to Y 는 N 번 판 을 X 기둥 에서 Y 기둥 으로 이동 하 는 것 을 나타 낸다.X, Y 는 {A, B, C} 에 속한다.
샘플 입력 샘플 입력
3
샘플 출력 샘플 출력
7
1 from A to C
2 from A to B
1 from C to B
3 from A to C
1 from B to A
2 from B to C
1 from A to C
데이터 범위 및 알림 Data Size & Hint
n<=10
/*
:
, 3 , , :
eg: top a n b
:
1、 top a n-1 b , a
2、 a c ,c 198-a-b( 'A'+'B'+'C'=198), top+n-1
3、 top b n-1 c ,
2、3 , 1 ,
*/
#include <stdio.h>
void hanoi(int n,char a,char b,int top) // top a n b
{
if(n==1) // ,
printf("%d from %c to %c
",top,a,b);
else // ,
{
hanoi(n-1,a,198-a-b,top); // top a n-1 c , a ,c 198-a-b( 'A'+'B'+'C'=198)
hanoi(1,a,b,top+n-1); // a b , top+n-1
hanoi(n-1,198-a-b,b,top); // top c n-1 b ,
}
}
int main()
{
int n,i,m=0;
scanf("%d",&n);
for(i=1;i<=n;i++) // n
m=2*m+1;
printf("%d
",m);
hanoi(n,'A','C',1);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
NYOJ 488 소수 링/ / 제목 링크:http://acm.nyist.net/JudgeOnline/problem.php?pid=488 이 문 제 는 hdu 1016 을 각색 한 것 이지 만 고 친 것 은 많 지 않다. 마찬가지 입 니 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.