public class HNT {
public static void main(String[] args) {
HNT a1 = new HNT();
a1.lToR(10); //给汉诺塔a1左边放10阶的层数,把左边的10阶移动至右边。
}
private boolean pHToM(int num,String a,String b,String c) { //打印移动数据,从a移动到c.
if (num == 1) { //只移动一层的情况,return false表示,如果num == 1则不再继续打印num<1的情况
System.out.printf("%s to %s\n",a,c);
return false;
}
else if (num == 2) { //只移动两层的情况,return false表示,如果num == 2则不再继续打印num<2的情况
System.out.printf("%s to %s\n",a,b);
System.out.printf("%s to %s\n",a,c);
System.out.printf("%s to %s\n",b,c);
return false;
}
else { //
return true; //移动大于两层的情况,return true表示,如果num>2则继续循环到num<=2为止
}
}
public void lToR(int num) { //把num层的汉诺塔从左移动至右
if(pHToM(num,"left","mid","right")) {
lToM(num - 1);
lToR(1);
mToR(num - 1);
}
}
public void lToM(int num) { //把num层的汉诺塔从左移动至中
if(pHToM(num,"left","right","mid")) {
lToR(num - 1);
lToM(1);
rToM(num - 1);
}
}
public void mToL(int num) { //把num层的汉诺塔从中移动至左
if(pHToM(num,"mid","right","left")) {
mToR(num - 1);
mToL(1);
rToL(num - 1);
}
}
public void mToR(int num) { //把num层的汉诺塔从中移动至右
if(pHToM(num,"mid","left","right")) {
mToL(num - 1);
mToR(1);
lToR(num - 1);
}
}
public void rToL(int num) { //把num层的汉诺塔从右移动至左
if(pHToM(num,"right","mid","left")) {
rToM(num - 1);
rToL(1);
mToL(num - 1);
}
}
public void rToM(int num) { //把num层的汉诺塔从右移动至中
if(pHToM(num,"right","left","mid")){
rToL(num - 1);
rToM(1);
lToM(num - 1);
}
}
}

Java实现汉诺塔移动,只需传一个int值(汉诺塔的阶)的更多相关文章

  1. Java源码中的发现:快速判断一个int值是几位数

    判断一个int值是几位数,要是我自己实现,估计又会想到除法和模运算了,偶然在java标准API源码中发现的写法,很强大. public class Test { final static int[] ...

  2. RecyclerView.Adapter封装,最简单实用的BaseRecyclerViewAdapter;只需重写一个方法,设置数据链式调用;

    之前对ListView的BaseAdapter进行过封装,只需重写一个getView方法: 现在慢慢的RecyclerView成为主流,下面是RecyclerView.Adapter的封装: Base ...

  3. Java泛型详解,通俗易懂只需5分钟

    转载出处:http://www.weixueyuan.net/view/6321.html 我们知道,使用变量之前要定义,定义一个变量时必须要指明它的数据类型,什么样的数据类型赋给什么样的值. 假如我 ...

  4. mybatia的mypper.xml文件,参数类型为map,map里有一个键值对的值为数组,如何解析,例子可供参考,接上文,发现更简便的方法,不必传数组,只需传字符串用逗号隔开即可

    是这样的 先看参数 map.put("orgId", "1818"); map.put("childDeps", "1000,10 ...

  5. 利用 TypeConverter,转换字符串和各种类型只需写一个函数

    本文代码基于 .NET Framework 实现. 本来只想进行简单的配置存储的,不料发现 .NET 的基本类型多达十多种.于是,如果写成下面这样,那代码可就太多了哦: // 注:`Configura ...

  6. java开发区块链只需150行代码

    本文目的是通过java实战开发教程理解区块链是什么.将通过实战入门学习,用Java自学开发一个很基本的区块链,并在此基础上能扩展如web框架应用等.这个基本的java区块链也实现简单的工作量证明系统. ...

  7. 【百度地图API】发布静态图API啦!只需一个网址,即可展示定制百度地图!

    原文:[百度地图API]发布静态图API啦!只需一个网址,即可展示定制百度地图! 摘要: 百度地图静态图API!您无须执行任何“特殊”操作便可在网页上显示此图片. 不需要 JavaScript.我们只 ...

  8. Java进阶知识点1:白捡的扩展性 - 枚举值也是对象

    一.背景 枚举经常被大家用来储存一组有限个数的候选常量.比如下面定义了一组常见数据库类型: public enum DatabaseType { MYSQL, ORACLE, SQLSERVER } ...

  9. Java中传参的值传递和引用传递问题(转)

    今天遇到了一个java程序,需要用参数来返回值(虽然最后用另一种方法实现了),在网上看到这样一篇文章,很受启发. 本文章来自于http://hi.baidu.com/xzhilie/blog/item ...

随机推荐

  1. Java核心技术 卷一 复习笔记(丁

    面向对象1.面向对象设计概述 1.1.面向对象是什么 面向对象是一种程序设计范型(简称OOP),是针对对象进行开发,简化开发过程的一种设计方式 1.2.类 类是构造对象的模板,相当于一个烘焙模板,而对 ...

  2. 甘特图控件如何自定义绘图?DevExpress Winforms帮你忙

    DevExpress Winforms Controls 内置140多个UI控件和库,完美构建流畅.美观且易于使用的应用程序.无论是Office风格的界面,还是分析处理大批量的业务数据,DevExpr ...

  3. mysql sql语句多表合并UNION ALL和UNION

    select d1.ID,CAST(d1.ID AS CHAR) AS intId, d1.CODE_TYPE, d1.CODE, d1.CODE_IMG, d1.VALUE from m_dict_ ...

  4. 第六章 Flask数据库(一)之SQLAlchemy

    将ORM模型映射到数据库中 1. 用`declarative_base`根据`engine`创建一个ORM基类. from sqlalchemy.ext.declarative import decl ...

  5. python协程初步--gevent库使用以及解释什么是猴子补丁monkey_patch

    协程工作的特点是遇到阻塞或耗时的任务时就切换,协程的生存依赖于线程,线程依赖于进程 一个似乎有点问题的例子 import gevent,time def kisscpc(num): for i in ...

  6. web开发下载文件夹

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用.此控件PC全平台支持包括mac,linux系统的文件上传,文章末尾将附上控件下载与教程链接 ...

  7. CF103D Time to Raid Cowavans 根号分治+离线

    题意: 给定序列 $a,m$ 次询问,每次询问给出 $t,k$. 求 $a_{t}+a_{t+k}+a_{t+2k}+.....a_{t+pk}$ 其中 $t+(p+1)k>n$ 题解: 这种跳 ...

  8. Codevs 1743 反转卡片(splay)

    1743 反转卡片 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description [dzy493941464|yywyzdzr原创] 小A将N ...

  9. open, create, close

    1.open 系统调用 说明: 调用open函数打开或者创建一个文件.函数定义如下:  #include <fcntl.h> int open(const char *pathname, ...

  10. Python学习日记(六)——内置函数和文件操作(lambda)

    lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: # 普通条件语句 if 1 == 1: name = 'prime' else: name = 'c ...