Day5、Python

举报
Jack-Cui 发表于 2021/05/31 13:43:55 2021/05/31
【摘要】 题目 汉诺塔 1、程序分析     Hanoi塔问题,算法分析如下,设A上有n个盘子(编号由上到下:1、2、3……、n)。A:初始塔,B:中转塔,C:目标塔     a、如果n=1,则将盘子从A塔直接移动到C塔(借助B塔)。     b、如果...

题目 汉诺塔
1、程序分析
    Hanoi塔问题,算法分析如下,设A上有n个盘子(编号由上到下:1、2、3……、n)。A:初始塔,B:中转塔,C:目标塔
    a、如果n=1,则将盘子从A塔直接移动到C塔(借助B塔)。
    b、如果n=3,则:
    (1)将A塔上编号1~2的盘子(2个盘子)移动到B塔上(借助C塔);
    (2)将A塔上编号3的盘子(最后一个盘子)移动到C塔上;
     (3)将B塔上编号1~2的盘子(2个盘子)移动到C塔上(借助A塔)。
     c、延伸,如果n=num,则:
    (1)将A塔上编号1~num-1的盘子(num-1个盘子)移动到B塔上(借助C塔);
    (2)将A塔上编号num的盘子(最后一个盘子)移动到C塔上;
    (3)将B塔上编号1~num-1的盘子(num-1个盘子)移动到C塔上(借助A塔)。
2、程序实现

#tpoic : 汉诺塔   
#File Name : Hanoi.py
#Author : Jack Cui
#Created : 7 April 2016

#第一个塔A为初始塔,中间的塔B为中转塔,最后一个塔C为目标塔
def move(n,n_from,n_to): global i #声明i是全局变量 print('第%d步:%d号盘子  初始塔%s-->目标塔%s' % (i,n,n_from,n_to)) i += 1
#汉诺塔移动函数,将n个盘子(借助中转塔)由初始塔上移动到目标塔上
def hanoi(n,n_from,n_transit,n_to): if n == 1: move(1,n_from,n_to) #只有一个盘子直接将初始塔A上的盘子移动到目标塔C else: hanoi(n-1,n_from,n_to,n_transit)#先将初始塔A的前n-1个盘子借助目标塔C移动到中转塔B上 move(n,n_from,n_to) #将初始塔A上最后一个盘子移动到目标塔C上 hanoi(n-1,n_transit,n_from,n_to)#最后将中转塔上的n-1个盘子移动到目标塔上

if __name__ == '__main__': i = 1 n = int(input('请输入盘子的个数:')) print('盘子移动的方法如下:') hanoi(n,'A','B','C')
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

3、显示结果
Ubuntu

文章来源: jackcui.blog.csdn.net,作者:Jack-Cui,版权归原作者所有,如需转载,请联系作者。

原文链接:jackcui.blog.csdn.net/article/details/51085557

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。