经典编程题之汉诺塔

编程入门 行业动态 更新时间:2024-10-10 15:24:20

<a href=https://www.elefans.com/category/jswz/34/1769979.html style=经典编程题之汉诺塔"/>

经典编程题之汉诺塔

汉诺塔问题

问题描述

给定三个柱子:A,B,C
规定有n个盘子,初始时盘子全部在A柱,借助B柱将所有盘子移动到C柱即可完成,每次只能移动一个盘子,而且必须保证小盘子在大盘子上。

1、先拿三个盘子举例:

(用画图工具画的,有点丑别介意哈!☺)

分以下几步进行:

1)把绿色和粉色两个盘子借助C柱移动到B柱
2)把蓝色盘子移动到C柱
3)把绿色和粉色借助A分别移动到C柱

因此,考虑到步骤都是重复的,我们可以借助递归来解决此问题
定义一个方法,Hanoi(int n,char A,char B,char C)(n为盘子的数量)
(ps:ok,接下来看图解,目前小雪还没找到合适的工具作图,只能用画图工具来画了,残缺的柱子大家可以忽略不计,重要的是学会思想哈!雪儿尽力画了)

详细过程:







ok,大功告成!4个,5个盘子甚至更多都可以依次类推,相信大家已经看懂了,这里雪儿不在做过多的赘述。

接下来咱们一起来撸代码:

package com.xiujie.part_8;import java.util.Scanner;public class Hanoi {static int i=0;public static void main(String[] args) {Scanner scanner=new Scanner(System.in);char A='A';char B='B';char C='C';System.out.println("请输入盘子的数量");int n=scanner.nextInt();getHanoi(n, A, B, C);scanner.close();System.exit(0);}public static void getHanoi(int n,char A,char B,char C) {//一定要记得写递归出口,不然会报错if (n==1) {System.out.println("第"+(++i)+"次移动,"+A+"盘子---->"+C+"盘子");}else {getHanoi(n-1, A, C, B);System.out.println("第"+(++i)+"次移动,"+A+"盘子---->"+C+"盘子");getHanoi(n-1, B, A, C);}}
}

接下来输入3个盘子来验证我们的结果

运行结果

证明结果是正确的,ok。

个人写代码的一些小建议(大佬就不必要看了)
对于刚入门的小白来说一定要多多练习,慢慢就会写代码了,代码不是一天两天速成的,除非是天才或者数学高手,对于我这种计算机废材来说,当初学Java学的特费劲,学习一门语言不仅需要极大的耐心,而且需要勤快的双手,一定要多敲多练,不能三天打渔两天晒网(偷偷告诉你,我就是那种类型的!),当初学习的时候差点奔溃,可能当时我真的没有用心去学吧,或者大脑中没有建立计算机知识的反射弧,根本不知道为什么那样去做,这样做了能产生什么样的结果,总是以投机的方式去测试自己写的代码,别人一小时搞定我可能需要4-5个小时,费劲而且得不偿失,一定要专心去研究每一种方法的用法(我当时可能就输在专心上,千万边聊天边写,可以一心二用者除外),另外要相信自己,Everything is possible!

更多推荐

经典编程题之汉诺塔

本文发布于:2024-03-13 07:26:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1733460.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:经典   汉诺

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!