汉诺塔
题目描述
使用递归编写一个程序实现汉诺塔问题,要求在输入圆盘数量之后,输出圆盘的移动步骤,输出格式示例如下:
第1步:1号盘从A柱移至B柱
第2步:2号盘从A柱移至C柱
输入
多组测试用例,每组输入一个正整数n,n代表圆盘数量。
输出
每组输出之间有一行空行。
样例输入
3
样例输出
第1步:1号盘从A柱移至C柱
第2步:2号盘从A柱移至B柱
第3步:1号盘从C柱移至B柱
第4步:3号盘从A柱移至C柱
第5步:1号盘从B柱移至A柱
第6步:2号盘从B柱移至C柱
第7步:1号盘从A柱移至C柱
Code
package Week3;
import java.util.Scanner;
public class Q5 {
//使用递归编写一个程序实现汉诺塔问题,要求在输入圆盘数量之后,输出圆盘的移动步骤,输出格式示例如下:
//第1步:1号盘从A柱移至B柱
//第2步:2号盘从A柱移至C柱
//多组测试用例,每组输入一个正整数n,n代表圆盘数量。
//每组输出之间有一行空行。
static int step;
public static void main(String[] args) {
int n;
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
step = 0;
n = sc.nextInt();
hanoi(n,'A','B','C');
System.out.println();
}
}
public static void hanoi(int n, char a, char b, char c) {
if (n > 0) {
hanoi(n - 1, a, c, b);
move(n, a, c);
hanoi(n - 1, b, a, c);
}
}
public static void move(int n, char a, char b){
System.out.println("第"+(++step)+"步:"+n+"号盘从"+a+"柱移至"+b+"柱");
}
}