시험 알고리즘 한 노 타 향상
문 제 는 한 노 타 를 묘사 하 는 오래된 수학 문제 이다. 세 개의 막대기 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
*/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.