java hanoi_Hanoi问题java解法
用什么语言解法都差不多,思路都是一样,递归,这其中只要注重于开始和结果的状态就可以了,对于中间过程,并不需要深究。(我细细思考了一下,还是算了。=_=)
代码其实很简单注重的是思路。
问题描述:有一个梵塔,塔内有三个座A、B、C,A座上有诺干个盘子,盘子大小不等,大的在下,小的在上。把这些个盘子从A座移到C座,中间可以借用B座但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。
简要概括一下,每次只能移动一个盘子,小盘子不能被大盘子压着,源座是A、目标座是C,过渡座是B。
嗯,问题很明确,下面开始分析。
我思考的过程是,先考虑一下最简单的情况,即只有一个盘子(n=1),一个盘子很好解决,A——>C即可;当盘子数(n)为不确定的个数的时候,这时候,我们写一个方法,将(n-1)个盘子按规则移动到B盘,那么A盘上剩下的必然是最大的盘子,A——>C直接移动到C盘即可;那么现在B盘上有(n-1)个盘子,为了让这n-1个盘子中的最大的那个盘子移动到C盘,我们写一个方法将(n-2)个盘子按规则移动到A盘,而B座上剩下(n-1)中最大的盘子,将这个盘子移动到C盘;此时A上面有(n-2)个盘子,我们写一个方法将(n-3)个盘子移动到C盘...
那么现在解法很明了了,后面不过是重复上诉步骤而已了,函数体没变,只是目标座和过渡座变化了而已。
没有必要去深究这中间的过程,如果从一开始去深究,n个盘子,每一个盘子的轨迹的话,那么只能是越陷越深,有时候也是要换一个角度去考虑问题。
废话不说了,直接上代码:
public class hanoi {
public static void main(String[] args){
hanoi h = new hanoi();
h.move(3, 'A', 'B', 'C');
}
public void move(int n,char a,char b,char c){
if(n == 1){
System.out.println("Disk "+n+" From "+a+" To "+c);
}else{
move(n - 1,a,c,b);
System.out.println("Disk "+(n)+" From "+a+" To "+c);
move(n - 1,b,a,c);
}
}
}
嗯,以上。
相关文章:

C#下载远程文件到本地
usingSystem;namespaceDownRemoteFile{ classDownFile { #region成员变量privatestringsavePath; privateboolnewName; #endregion#region属性publicstringSavePath { set{ savePathvalue.Replace("/"…

智慧城市锁定创新,智能AI助力智慧健康
近日,上海中医药大学的校园里出现了一台智能机器人,而在学校创新中心,这台名叫“大医”的智能机器人现场演示了健康咨询及判断结果显示等功能,则让师生产生了极大的兴趣。 上海中医药大学副校长季光教授表示,具备医疗思…
【C#串口编程计划】如何避免关闭串口时软件死锁
本文分析了关闭串口时软件死锁的原因并提出了解决方案。

java实现redis缓存_java实现redis缓存功能
一、安装redis1.mac安装,如果有安装brew 可以直接快捷安装:brew install redis2.linux下载安装wget http://download.redis.io/releases/redis-2.8.17.tar.gztar xzf redis-2.8.17.tar.gzcd redis-2.8.17make二、redis常用命令redis-cli // 进入命令行/u…

notepad++及Scintilla
notepad是一个不错的源代码编辑的软件, 其内部使用了 Scintilla 作为UI的实现, notepad源代码可在在http://notepad-plus.sourceforge.net/tw/site.htm下载, 里面已经有Scintilla 的源代码了Scintilla 的文档在http://www.scintilla.org/ScintillaDoc.html作为一个功能强大的源…
【C#串口编程计划】C#串口协议解析 -- 二进制数据
本文介绍了利用C#接收串口数据(二进制)并进行分析的常规过程。

网络电话如何营造成熟的通信商业模式
在现如今越来越多的手机用户大呼根本离不开微信等热门互联网即时通讯工具的今天,电话通信是否真正已经成为让人感到无奈的“昨日黄花”?最为直接和相对简单的两个例子:对于海量外出务工者来说,老家的父母和儿女并没办法用微信&…

java gettickcount_linux上的GetTickCount函数
#include // 返回自系统开机以来的毫秒数(tick)unsigned long GetTickCount(){struct timespec ts;clock_gettime(CLOCK_MONOTONIC, &ts);return (ts.tv_sec * 1000 ts.tv_nsec / 1000000);}int main(){struct timespec time1 { 0, 0 };clock_gettime(CLOCK_REALTIME, &a…

博问问题内容页面的前端优化
写前端优化的文章在博客园高手云集的地方有点班门弄斧的感觉,不过自己对有些地方的处理还是自我感觉良好,也的确看到了效果,好了,闲话少说,切入正题。 首先划分页面的重要区域,如图: 由上图可知…
【C#串口编程计划】C#串口协议解析 -- 文本数据
本文介绍了利用C#接收串口数据(文本)并进行分析的标准过程。

2017年7个主要的金融行业数据趋势
大数据预示着金融行业的一些巨大变化,而新技术正在推动行业发展的新趋势。任何人在金融领域甚至普通消费者都能从认识到他们中获益。任何金融界人士,甚至普通消费者,都可以从这些技术中受益。 2017年金融行业数据趋势 使用这些趋势来指导人们…

asp java 变量_ASP_用stack变量优化Java代码, java程序包含了大量的对象 - phpStudy...
用stack变量优化Java代码java程序包含了大量的对象,我们需要了解它们是从哪里被访问的,变量存储于何处对程序的性能有显著的影响--尤其是某些需要被频繁访问的变量。我们写一个Java类,在其内部方法中定义的局部变量或对…

Flex实现页面多态--state对象
在Flex 程序中,引入了状态设计的概念。在一个程序中,按照功能的需求,将界面切分成相对独立的部分。运行过程中,随着用户交互,界面在各个部分之间切换。比如在购物车程序中,登录界面、选购商品界面、购物车界…
【C#串口编程计划】通信协议解析 -- byte[]与常用类型的转换
刚刚完成一个串口通讯的系统。目前在把串口通信的代码整合到团队的类库中(把串口通信与网口Soket通讯整合起来,后面只需要配置参数,就可实现网络与串口通讯的转换),故C#串口编程计划的最后一篇图文“C#通讯类库框架”还…

聚焦OA品牌:OA产品影响力是选型关键
选择OA进行企业管理不论是对于企业还是政府来说都是大势所趋。如今OA产业发展得红红火火,呈现出一种百花齐放的局面。然而近年来,许多OA厂商在产品的建设过程中都遇到了瓶颈,如何在OA产品的竞争中脱颖而出成了大多数OA产商所关注的问题。 企业…

java sql编码_java+sql 编码 UTF-8、ISO-8859-1、GBK
java 编码 UTF-8、ISO-8859-1、GBKJava支持UTF-8、ISO-8859-1、GBK等各种字体编码,可笔者发现Java中字体编码的问题仍难倒了不少程序员,网上虽然也有不少关于在Java中如何正确显示中文的文章,但都不够全面,笔者特意总结如下。影响…

.NET三层架构
三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。 …
【C#串口编程计划】C#通讯类库构建
这篇图文是关于【串口编程计划】的最后一篇“C#通讯类库的构建”,也就是把这次所做的关于串口系统的代码集成到团队的类库中,做到代码的可复用(以后写串口的系统,只需要写数据的定义,协议的解析部分就好,通…

WhatsApp与Gmail用户数均突破10亿大关
北京时间2月2日早间消息,FacebookCEO马克-扎克伯格(Mark Zuckerberg)周一宣布,WhatsApp的用户数突破了10亿。今天,谷歌CEO桑德尔-皮查伊(Sundar Pichai)也在财报电话会议中披露,Gmail活跃用户数已突破10亿。 两年前,Fa…

linux 普通用户 mysql_Linux普通用户部署mysql
1、添加一个新用户,并设置密码user testpasswd test2、解压安装包,并重命名为mysqltar zxvf mysql-5.5.54-linux2.6-x86_64.tar.gz3、移除data目录数据rm -rf data/*4、拷贝配置文件cp support-files/my-medium.cnf my.cnf5、新建一个script目录作为启动…

JQUERY搞的相册导航DEMO教学,总有一款合心意
JQUERY搞的相册导航DEMO教学,总有一款合心意 偶然看到的,老外小结的,用jquery搞的相册导航,总有一款合心意,25款哦http://vandelaydesign.com/blog/web-development/jquery-image-galleries/posted on 2009-08-08 00:15 jackyrong的世界 阅读(...) 评论(...) 编辑 收…

ASP.NET Aries JSAPI 文档说明:AR.Form、AR.Combobox
AR.Form 文档 1:对象或属性: 名称 类型 说明 data 属性 编辑页根据主键请求回来的数据 method 属性 用于获取数据的函数指向,默认值Get objName 属性 用于拦截form表单的请求数据对象名,可以表名,视图名 t…
【通俗理解线性代数】 -- 矩阵与空间的基和坐标
本微信图文从矩阵与坐标系的角度对矩阵进行了通俗化介绍!

mysql 5.7 mts_MySQL:MTS和mysqldump死锁
###一、问题来源这是一位客户的提供的案例如下,show processlist截图如下:出现这种问题除非手动干预…

SQL SERVER 获取表结构信息《转载》
获取表信息SELECT表名 casewhena.colorder1thend.name elseend, 表说明 casewhena.colorder1thenisnull(f.value,) elseend, 字段名 a.name, 主键 casewhenexists(SELECT1FROMsysobjects wherextypePKandparent_obja.id andname in( …

混合托管:第三代云计算
企业在选择技术时,都必须立足公司的未来,并保持自己的理念和观点。而技术经过几代改进,才能更加广泛地应用。 以磁盘驱动器作为例子。磁盘驱动器作由IBM公司1953年研发,每一次更新换代时,新的磁盘驱动器的容量更大&…
【通俗理解线性代数】 -- 特殊的矩阵
本微信图文主要介绍了旋转矩阵、对角矩阵和矩阵乘法的几何与物理意义。

mysql 数据库 数组类型转换_mysql数字类型的数据如何进行转换?
如何将MySQL数据库中的数字类型转换为数字函数,今天给大家介绍mysql中的转换函数,这个在实际的生活应用中是运用广泛的,大大减少了我们自己手动进行数字类型的转换。我们今天主要向大家介绍的是用MySQL数字类型如何正确的转换函数(concat/cas…

测试用例设计规范
1、引言 测试设计遵循与软件设计相同的工程原则。好的软件设计包含几个对测试设计进行精心描述的阶段。这些阶段是: ● 测试策略 ● 测试计划 ● 测试描述 ● 测试过程 上述四个测试设计阶段适用于从单元测试到系统测试各个层面的测试。 测试设计由软件设计说明所驱…
【通俗理解线性代数】 -- 矩阵的等价与相似
本微信图文通俗讲解了矩阵等价与矩阵相似的意义。