package day21;
class hannuota{//无论有多少盘子,都把它看成2个,底下最大的一个和上面的许多个
public void move(int a1,char a,char b,char c){
if(a1==1)//基本思路:把上面的许多个从a移动到b借助c,然后把最大一个移动到c,最后把b上的许多个移动到c借助a
System.out.println(a+"->"+c);
else{
move(a1-1,a,c,b);
System.out.println(a+"->"+c);
move(a1-1,b,a,c);
}
}
}
public class Show {
public static void main(String[] args){
hannuota hannuota=new hannuota();
hannuota.move(3,'A','B','C');
}
}
附加:输出一共要移动几次和第n步怎么移动
import java.util.Scanner;
public class Main{
static int count=0;
static int index=0;
public static void main(String[] args){
Scanner input=new Scanner(System.in);
int n=input.nextInt();
int a=input.nextInt();
index=a;
Hanoi(n,'A','B','C');
System.out.println("\n"+count);
}
public static void Hanoi(int n,char a,char b,char c) {
if(n==1){
count++;
if (count==index) {
System.out.printf("#%d:%c->%c",count,a,c);
}
}
else{
Hanoi(n-1,a,c,b);
count++;
if (count==index){
System.out.printf("#%d:%c->%c",count,a,c);
}
Hanoi(n-1,b,a,c);
}
}
}