시험 알고리즘 한 노 타 향상

시험 알고리즘 한 노 타 향상
문 제 는 한 노 타 를 묘사 하 는 오래된 수학 문제 이다. 세 개의 막대기 A, B, C 가 있다.A 레버 에는 N 개 (N > 1) 피 어 싱 원반 이 있 고 디스크 의 사 이 즈 는 아래 에서 위로 순서대로 작 아진 다.다음 규칙 에 따라 모든 원반 을 C 대로 옮 겨 야 합 니 다. 매번 원반 하나만 이동 할 수 있 습 니 다.큰 접시 가 작은 접시 위 에 겹 쳐 서 는 안 된다.알림: 원반 을 임시로 B 타 에 놓 을 수도 있 고 A 타 에서 옮 긴 원반 을 다시 A 타 로 옮 길 수도 있 지만 모두 상기 두 가지 규칙 을 따라 야 합 니 다.
가: 어떻게 옮 겨 요?적어도 몇 번 은 이동 해 야 합 니까?한 줄 을 입력 하 십시오. 두 개의 정수 가 포함 되 어 있 습 니 다. 하 나 는 N (N < = 15) 입 니 다. 하 나 는 M 입 니 다. 하 나 는 최소 이동 d 제 M 단계 에서 출력 형식 을 총 2 줄 로 표시 합 니 다. 첫 번 째 줄 의 출력 형식 은 \ # No: a - > b 입 니 다. M 단계 의 구체 적 인 이동 방법 을 표시 합 니 다. 그 중에서 No 표 는 M 단계 에서 이동 하 는 접시 의 번호 (N 개의 접시 가 위 에서 아래로 순서대로 1 부터 n 까지) 를 표시 합 니 다."M 단 계 는 No 번 접 시 를 a 바 에서 b 바 로 이동 시 키 는 것 입 니 다. (a 와 b 의 수치 가 모두 {A, B, C} 입 니 다.) 두 번 째 줄 은 정 수 를 출력 하여 최소 이동 보 수 를 표시 합 니 다. 샘플 은 32 개의 출력 \ # 2: A - > B 7 데이터 규모 와 약정 0 을 입력 합 니 다.
import java.util.Scanner;

public class Main {
     

	static int bu=0;
	static int m;
	public static void main(String[] args) {
     
	      Scanner sc = new Scanner(System.in);
	      int n=sc.nextInt();	   
	      m=sc.nextInt();
	      hanio('A','B','C',n);
	      System.out.println(bu);
	      
	}
	
	static void hanio(char A, char B, char C, int n) {
     
		
		if(n==1) {
     
			bu++;
			if(bu==m)
			   System.out.println("#"+n+": "+A+"->"+C);
			return;
		}
		
		hanio(A, C, B, n-1);
		bu++;
		if(bu==m)
		    System.out.println("#"+n+": "+A+"->"+C);
		hanio(B, A, C, n-1);
	}	
}
/*
3 2
A->C 1   1
A->B 2   2
C->B 1   3
A->C 3   4
B->A 1   5
B->C 2   6
A->C 1   7
7

*/


좋은 웹페이지 즐겨찾기