题目:传说在遥远的古代有一座汉诺塔,共有三层,第一层放了64个大小不一致的盘,并且,这些盘的摆放是从大到小,问你如果把第一层的盘转移到三层楼去?
思路解答:汉诺塔,想必大家都玩过这个游戏,相当于有三根柱子,第一根柱子有64个从大到小摆放着,如何从第一根柱子放到第三根里面?
因此,思路应该是这样,除了只有一个盘子的情况外,我们还考虑两种情况,第一种,将第一更柱子上的盘子借助第三根柱子移到到第二个柱子上,第二种就是将第二根柱子上的盘子借助第一根柱子移动到第三根柱子上。
代码实现:
packagecom.mooc.hanoi;
importjava.util.Scanner;
public class Hanoi {
private static void move(char x,char y)
{
System.out.printf("%c->%c",x,y);//%c代表单个字符
System.out.println("\n");
}
//将n个盘子从第一座借助第二座移到第三座
private static void hanoit(int n,char one,char two,char three)
{
if(n==1) //如果只有一个盘子
{
move(one,three);
}
else
{
hanoit(n-1,one,three,two); //将一上的盘子借助三移到二上
move(one,three);
hanoit(n-1,two,one,three); //将二的盘子借助一移到三上
}
}
public static void main(String[] agrs)
{
int m;
System.out.println("请输入你移动的盘子数:");
Scanner sc = newScanner(System.in);
m=sc.nextInt();
System.out.println("移动"+m+"个盘子的步骤如下");
hanoit(m,'A','B','C');
}
}