题目:
最大圆盘在最底,其余依次叠上去,依次减小,现要求将圆盘逐个移动到另一根杆上,规定一次只能移动一个,且小的只能放到大的上面。
import java.util.Scanner;
public class Hanoi {
private static int count;
public static void main(String[] args) {
int n;
Scanner sc=new Scanner(System.in);
System.out.print("请输入圆盘数量:");
n=sc.nextInt();
count=0;//表示移动的步数
hanoi(n,'X','Y','Z');//三根杆分别为'X','Y','Z'
sc.close();
}
private static void hanoi(int n, char x, char y, char z) {
/*
当n=1时,将圆盘从第一杆移动到第三杆;
当n>1时,把圆盘看作两部分,第一部分是最底层的圆盘,第二部分就是除了最底层之外的所有圆盘的总和,
第一步:将第一部分的圆盘从第一杆移动到第二杆;
第二步:将第二部分的圆盘从第一杆移动到第三杆
第三步:将第一部分的圆盘从第二杆移动到第三杆
*/
if(n==1){
System.out.println("第"+(++count)+"次移动,从"+x+"移动到"+z);
}else{
hanoi(n-1,x,z,y);
System.out.println("第"+(++count)+"次移动,从"+x+"移动到"+z);
hanoi(n-1,y,x,z);
}
}
}