汉诺塔实践python_Python-汉诺塔问题
概述:
据说古代有一个梵塔,塔内有三个底座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上。
有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,在移动盘子的过程中可以利用B座,但任何时刻3个座上的盘子都必须始终保持大盘在下、小盘在上的顺序。如果只有一个盘子,则不需要利用B座,直接将盘子从A移动到C即可。和尚想知道这项任务的详细移动步骤和顺序。
这实际上是一个非常巨大的工程,是一个不可能完成的任务。
根据数学知识我们可以知道,移动n个盘子需要(2^n-1)步,64个盘子需要18446744073709551615步。如果每步需要一秒钟的话,那么就需要584942417355.072年。
def hannuo(num, src, dst, temp=None):
#声明用来记录移动次数的变量为全局变量
global times
#确认参数类型和范围(可不写)
#----------------------------------------------------------------
assert type(num) == int, 'num must be integer'
assert num > 0, 'num must > 0'
#----------------------------------------------------------------
#只剩最后或只有一个盘子需要移动,这也是函数递归调用的结束条件
if num == 1:
print('The {0} Times move:{1}==>{2}'.format(times, src, dst))
times += 1
else:
#递归调用函数自身,
#先把除最后一个盘子之外的所有盘子移动到临时柱子上
hannuo(num-1, src, temp, dst)
#把最后一个盘子直接移动到目标柱子上
hannuo(1, src, dst)
#把除最后一个盘子之外的其他盘子从临时柱子上移动到目标柱子上
hannuo(num-1, temp, dst, src)
#用来记录移动次数的变量
times = 1
#A表示最初放置盘子的柱子src,C是目标柱子dst,B是临时柱子temp
n = int(input())
hannuo(n, 'A', 'C', 'B')
n = 3时,效果如图
【扩展实例】
汉诺塔实践
描述
请补充编程模板中代码,完成如下功能:
有三个圆柱A、B、C,初始时A上有N个圆盘,N由用户输入给出,最终移动到圆柱C上。
每次移动步骤的表达方式示例如下:[STEP 10] A->C。其中,STEP是步骤序号,宽度为4个字符,右对齐。
请编写代码,获得输入N后,输出汉诺塔移动的步骤。
输入格式
一个整数
输出格式
每个步骤一行,每行参考格式如下:[STEP 10] A->C
输入输出示例
输入
输出
示例 1
3
[STEP 1] A->C
[STEP 2] A->B
[STEP 3] C->B
[STEP 4] A->C
[STEP 5] B->A
[STEP 6] B->C
[STEP 7] A->C
steps = 0
def hanoi(src, des, mid, n):
global steps
if n == 1:
steps += 1
print("[STEP{:>4}] {}->{}".format(steps, src, des))
else:
hanoi(src, mid, des, n-1)
steps += 1
print("[STEP{:>4}] {}->{}".format(steps, src, des))
hanoi(mid, des, src, n-1)
N = eval(input())
hanoi("A", "C", "B", N)
汉诺塔实践python_Python-汉诺塔问题相关推荐
- 汉诺塔实践python_汉诺塔的python 动画演示
1.简介 古代有一座汉诺塔,塔内有3个座A.B.C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示.有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个 ...
- python面向过程实践汉诺塔_递归汉诺塔-和递归汉诺塔相关的内容-阿里云开发者社区...
多柱汉诺塔最优算法设计探究 多柱汉诺塔最优算法设计探究 引言 汉诺塔算法一直是算法设计科目的最具代表性的研究问题,本文关注于如何设计多柱汉诺塔最优算法的探究.最简单的汉诺塔是三个柱子(A.B.C),因 ...
- 汉诺塔系列问题: 汉诺塔II、汉诺塔III、汉诺塔IV、汉诺塔V、汉诺塔VI、汉诺塔VII
汉诺塔II:(hdu1207) /先说汉若塔I(经典汉若塔问题),有三塔,A塔从小到大从上至下放有N个盘子,现在要搬到目标C上, 规则小的必需放在大的上面,每次搬一个,求最小步数.这个问题简单,DP: ...
- 【递推】HDU1207汉诺塔II 【汉诺塔及汉诺塔变形 归纳】
汉诺塔问题 设f(n)为移动n层的汉诺塔的解,则整个过程其实分为三步: 把n-1层移到第二个上面去(花费f(n-1)) 把最大的移到第三个柱子上面去(花费1) 把n-1层移动到第三个柱子上去(花费f( ...
- 7-251 汉诺塔问题7-252 汉诺塔移动次数
目录 7-251 汉诺塔问题 7-252 汉诺塔移动次数 7-251 汉诺塔问题 分数 100 全屏浏览题目 切换布局 作者 于延 单位 哈尔滨师范大学 任务描述 在印度,有这么一个古老的传说:在世界 ...
- 算法之路(四)----汉诺塔(又称河内之塔)
汉诺塔是很简单也很经典的算法之一. 汉诺塔是根据一个传说形成的数学问题: 有三根杆子A,B,C .A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆: * ...
- 每天一算法(双色河内塔又叫汉诺塔)
说明 双色河内塔是由之前所介绍过的河内塔规则衍生而来,双色河内塔的目的是将下图左上的圆环位置经移动成为右下的圆环位置: 解法 双色河内塔或是原始的河内塔,其解法观念与之前介绍过的河内塔是类似的,同样也 ...
- access 记录集 filter find属性_《另一个伊甸》超越时空的猫时之塔阵容推荐 时之塔BOSS属性怎么打_另一个伊甸...
标签: buff 另一个伊甸时之塔BOSS属性打法攻略是游戏第十章时之塔关卡玩法,玩家们需要战胜BOSS通关获取奖励喔,那么另一个伊甸时之塔BOSS怎么打.另一个伊甸超越时空的猫时之塔boss阵容搭配 ...
- 【转贴】pentaho4.5汉化攻略及汉化文件
pentaho4.5汉化攻略及汉化文件 一.biserver-ce\tomcat\webapps\pentaho\mantle\messages\mantleMessages_supported_la ...
最新文章
- Error: Most middleware (like bodyParser) ...
- 数据处理系列(四) 安装Elasticsearch用以存储和查询数据
- Linux下网络编程
- 给web请求加遮罩动画
- Android SQLite数据库的基本操作-SQLiteDatabase
- 计算机导航 骨科 ppt模板,(医学PPT课件)术中即时三维导航在脊柱侧弯矫形的应用...
- php load dynamic library,PHP startup: Unable to load dynamic library错误的错误
- 日本的“电力路由器”概述
- 2021年中国窗口句柄市场趋势报告、技术动态创新及2027年市场预测
- python 自动登录方法_Python实现自动登录百度空间的方法
- Android版式– LinearLayout,RelativeLayout
- windows同时安装jdk8和jdk11
- php程序员开发工具箱,PHP程序员工具箱免费版
- 不变扩展卡尔曼滤波(IEKF)
- axure 自学入门教程
- Multisim基础 桥式整流二极管电路
- Mac运行Pycharm崩溃
- 读书笔记:《置身事内》
- 2021-07-29 vue事件冒泡和事件捕获,阻止冒泡和阻止浏览器默认行为
- Android 使用 Scheme 启动淘宝,天猫等其他APP
热门文章
- 数据湖-hudi概述
- 关键词符号:连接关键词用什么符号
- “茴”字有四种写法,this也是一样
- IO口扩展 74HC595芯片
- python excel 数据匹配_VLOOKUP函数将一个excel表格的数据匹配到另一个表中
- 免疫检查点 “新星“:HLA-E-MedChemExpress
- 多变量微积分笔记15——梯度场和势函数
- 加密数字货币的 7 个致命悖论
- 深度解读USB4® 2.0版规范--如何实现80Gbps数据传输?
- 人工智能辅助药物发现(1)肿瘤靶点识别