本帖最后由 niuapp 于 2015-5-22 23:16 编辑
据说 A柱子上如果有64个盘子,把它们都移动到C柱子上时,世界就会毁灭百度百科:http://baike.baidu.com/link?url=MWuajZIEWJRoU8ndGAlDTI9OYQd_kOIaBfKDrfT2AmCrrgFJp1PRwmJwchURQXsQU72p_rHlloPjOqHZeErWn_
输出例子:---------------------------------------------
输入A柱子上盘子个数 n = 4
把编号为1的盘子从A柱子移动到B柱子
把编号为2的盘子从A柱子移动到C柱子
把编号为1的盘子从B柱子移动到C柱子
把编号为3的盘子从A柱子移动到B柱子
把编号为1的盘子从C柱子移动到A柱子
把编号为2的盘子从C柱子移动到B柱子
把编号为1的盘子从A柱子移动到B柱子
把编号为4的盘子从A柱子移动到C柱子
把编号为1的盘子从B柱子移动到C柱子
把编号为2的盘子从B柱子移动到A柱子
把编号为1的盘子从C柱子移动到A柱子
把编号为3的盘子从B柱子移动到C柱子
把编号为1的盘子从A柱子移动到B柱子
把编号为2的盘子从A柱子移动到C柱子
把编号为1的盘子从B柱子移动到C柱子
请按任意键继续. . .
---------------------------------------------
- /*
- 需求:汉诺塔,有三个柱子,A柱子上从小到大有n个盘子,要借用B柱子把A柱子上的盘子移动到C柱子,大的在下边,小的在上边
- 步骤: 1.先创建三个柱子
- 2.输入A柱子上的盘子个数n
- 3.创建一个移动盘子的方法,接受三个柱子和盘子
- 4.递归
- 如果A柱子上有n个盘子,则先把 n-1 个盘子移动到B柱子,把A柱子上剩下的 第n个盘子移动到C柱子
- B柱子上有的 n-1 个盘子,把 (n-1)-1 个盘子移动到A柱子,把B柱子上剩下的 第n-1个盘子移动到C柱子
- ......直到A或B柱子上 只剩1个盘子,直接把它移动到C柱子,完成
- 总结:把大规模的东西分成两个部分,规模递减,直到把大规模的问题变成可以直接解决的问题
-
- */
- import java.util.Scanner;
- class HanNuoTa {
- public static void main(String[] args) {
- //先创建三个柱子
- char a = 'A';
- char b = 'B';
- char c = 'C';
- int n;
- Scanner sc = new Scanner(System.in);
- System.out.print("输入A柱子上盘子个数 n = ");
- n = sc.nextInt();
- move(n, a, b, c);
- }
- //接收 a/b/c 三个柱子(小写)目的是把a柱子上的盘子 借助b柱子 移动到c柱子
- public static void move(int n, char a, char b, char c){
-
- if(n==1){ //如果A柱子上只剩一个盘子,就直接把它移动到C柱子
- System.out.println("把编号为"+n+"的盘子从"+a+"柱子移动到"+c+"柱子");
- }else{
- move(n-1, a, c, b);//规模递减 先把A柱子上的 n-1 个盘子借助C移动到B
- System.out.println("把编号为"+n+"的盘子从"+a+"柱子移动到"+c+"柱子");//上边语句过后A柱子上只剩1个盘子,直接把它移动到C柱子
- move(n-1, b, a, c);//继续,把B柱子当做原先的A柱子,把B柱子上的 n-1 个盘子借助A移动到C
- }
- return;
- }
- }
复制代码
|
|