目录

7-251 汉诺塔问题

7-252 汉诺塔移动次数


7-251 汉诺塔问题

分数 100

全屏浏览题目

切换布局

作者 于延

单位 哈尔滨师范大学

任务描述

在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔(Tower of Hanoi)。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片到另一根针上。法则是一次只移动一片,而且小片必在大片上面。当所有的金片都从梵天穿好的那根针上移到第三根针上时,世界就将在一声霹雳中消灭,梵塔、庙宇和众生都将同归于尽。

利用数学方法可以计算得出,若传说属实,僧侣们需要264−1步才能完成这个任务。若他们每秒可完成一次盘子的移动,就需要5849亿年才能完成。整个宇宙现在也不过137亿年。

这就是关于汉诺塔传说,由此衍生出汉诺塔问题,这个问题看起来好像有点复杂,实际上可以用递归的思想来分析:

将n个盘子从A柱移到C柱可以分解为下面三个步骤:

(1)将A柱上的n-1个盘子借助于C柱移到B柱上;

(2)将A柱上的最后一个盘子移到C柱上;

(3)再将B柱上的n-1盘子借助于A柱移到C柱上。

其中,第一步又可以分解为以下三步:

(1)将A柱上的n-2个盘子借助于B柱移到C柱上;

(2)将A柱上的第n-1个盘子移到B柱上;

(3)再将C柱上的n-2个盘子借助于A柱移到B柱上。

这种分解可以一直递归地进行下去,直到变成移动一个盘子,递归结束。事实上,以上三个步骤包含两种操作:

(1)将多个盘子从一根柱子移到另一根柱子上,这是一个递归的过程;

(2)将一个盘子从一根柱子移到另一根柱子。

分别编写两个函数来实现以上两个操作。

函数hanoi(int n,char one,char two,char three)实现把"one"柱上的n个盘子借助于"two"柱移到"three"柱上;

函数move(char x,char y)表示将1个盘子从x柱移到y柱,并输出移动盘子的提示信息。

编程输入金盘的数量n,输出将n个金盘从A柱(借助B柱)移动到C柱的过程。

输入样例:

3

输出样例:

A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C
#include<stdio.h>
int main()
{int n=0;char a='a',b='b',c='c';scanf("%d %c %c %c",&n,&a,&b,&c);hanoi(n,a,b,c);
}void hanoi(int n,char a,char b,char c)
{if(n==1){printf("%c-->%c\n",a-32,c-32);}else{hanoi(n-1,a,c,b);printf("%c-->%c\n",a-32,c-32);hanoi(n-1,b,a,c);}
}

7-252 汉诺塔移动次数

分数 100

全屏浏览题目

切换布局

作者 于延

单位 哈尔滨师范大学

任务描述

在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔(Tower of Hanoi)。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片到另一根针上。法则是一次只移动一片,而且小片必在大片上面。当所有的金片都从梵天穿好的那根针上移到第三根针上时,世界就将在一声霹雳中消灭,梵塔、庙宇和众生都将同归于尽。

利用数学方法可以计算得出,若传说属实,僧侣们需要264−1步才能完成这个任务。若他们每秒可完成一次盘子的移动,就需要5849亿年才能完成。整个宇宙现在也不过137亿年。

这就是关于汉诺塔传说,由此衍生出汉诺塔问题,这个问题看起来好像有点复杂,实际上可以用递归的思想来分析:

将n个盘子从A柱移到C柱可以分解为下面三个步骤:

(1)将A柱上的n-1个盘子借助于C柱移到B柱上;

(2)将A柱上的最后一个盘子移到C柱上;

(3)再将B柱上的n-1盘子借助于A柱移到C柱上。

其中,第一步又可以分解为以下三步:

(1)将A柱上的n-2个盘子借助于B柱移到C柱上;

(2)将A柱上的第n-1个盘子移到B柱上;

(3)再将C柱上的n-2个盘子借助于A柱移到B柱上。

这种分解可以一直递归地进行下去,直到变成移动一个盘子,递归结束。事实上,以上三个步骤包含两种操作:

(1)将多个盘子从一根柱子移到另一根柱子上,这是一个递归的过程;

(2)将一个盘子从一根柱子移到另一根柱子。

编程输入金盘的数量n,输出将n个金盘从A柱(借助B柱)移动到C柱的过程中移动金盘的总次数(请分别用递归和非递归方法完成)。

输入样例:

5

输出样例:

31

输入样例:

1

输出样例:

1
#include<stdio.h>
double g(int n){double s;if(n == 1)s = 1;elses = 2*g(n-1)+1;return s;
} int main(){int n;scanf("%d",&n);if(n<=40)printf("%0.0f\n",g(n));elseprintf("%.4e\n",g(n));return 0;}

7-251 汉诺塔问题7-252 汉诺塔移动次数相关推荐

  1. 汉诺塔系列问题: 汉诺塔II、汉诺塔III、汉诺塔IV、汉诺塔V、汉诺塔VI、汉诺塔VII

    汉诺塔II:(hdu1207) /先说汉若塔I(经典汉若塔问题),有三塔,A塔从小到大从上至下放有N个盘子,现在要搬到目标C上, 规则小的必需放在大的上面,每次搬一个,求最小步数.这个问题简单,DP: ...

  2. 汉诺塔系列问题: 汉诺塔II、汉诺塔III、汉诺塔IV、汉诺塔V、汉诺塔VI

    汉诺塔 汉诺塔II hdu1207: 先说汉若塔I(经典汉若塔问题),有三塔,A塔从小到大从上至下放有N个盘子,现在要搬到目标C上, 规则小的必需放在大的上面,每次搬一个,求最小步数.这个问题简单,D ...

  3. 用C语言实现汉诺塔的移动过程并且统计移动的次数

    用C语言实现汉诺塔的移动过程以及移动的次数 题目说明 一共有三个柱子,在一个柱子上穿有若干个圆盘,这些圆盘按下大上小叠放,将这个柱子上的圆盘按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放 ...

  4. linux汉诺塔实验报告,数据结构-汉诺塔-实验报告

    数据结构-汉诺塔-实验报告 所属分类:Windows编程 开发工具:Visual C++ 文件大小:17KB 下载次数:1 上传日期:2017-12-13 11:59:17 上 传 者:会飞的树叶 说 ...

  5. 汉诺塔python代码解释_Python-汉诺塔原理分析

    最近在"廖雪峰的官方网站"学习Python,遇到汉诺塔递归问题百思不得其解,先是百度了汉诺塔原理,然后查看了别人的写的文章,通过整理汇总,希望能够帮助其他人理解. 汉诺塔原理:(来 ...

  6. python汉诺塔的求解_Python汉诺塔算法解析

    昨天看廖雪峰的Python教程,看到了递归函数,具体的递归函数看他讲的就可以,最好自己好好研究一下递归函数是干啥的,对于学习这一节有帮助,最后面有一个汉诺塔的练习题,汉诺塔简单来说就是三根柱子,A,B ...

  7. Axure7.0 以及 中文汉化语言包下载 axure汉化包

    支持 Axure RP Pro 正式版 当前最新版本 7.0.0.3184 不兼容6.5及以下版本! Axure7.0 下载地址:http://pan.baidu.com/s/1dEuR8YX Axu ...

  8. 单例设计模式介绍||单例设计模式八种方式——1) 饿汉式(静态常量) 2) 饿汉式(静态代码块) 3) 懒汉式(线程不安全) 4) 懒汉式(线程安全,同步方法)

    单例模式 单例设计模式介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法). 比如Hibernate的 ...

  9. 福特汉姆大学计算机科学专业,福特汉姆大学计算机研究生

    福特汉姆大学计算机研究生课程整合了计算机分析.实践和理论,在初期阶段学习计算.信息和系统的基础知识.学生将和通讯.网络.通讯网络设计.大型系统数据库.人工智能.信息检索系统.算法分析与设计方面的专业教 ...

  10. 福特汉姆大学计算机科学专业,福特汉姆大学优势专业

    了解福特汉姆大学有哪些专业对于打算去该校留学的小伙伴来说是很有必要的,这有助于大家选择专业.今天,出国留学网就为大家详细介绍福特汉姆大学有哪些优势专业,希望能够帮助到大家. 福特汉姆大学优势专业 生化 ...

最新文章

  1. Feedback about (Blockchain OR ML) AND (logistics)
  2. 读《代码不朽:编写可维护软件的10大要则》C# 版
  3. python基础知识点小结(2021/2/9)
  4. 应用配置管理ACM 使用场景快速入门
  5. 说说中国的图书出版业者-读《小学奥数举一反三(5年级A版)》和《2010注册建筑师建筑结构考试强化模拟试题集》有感...
  6. 菜单栏底部线条切换效果
  7. java jndi jboss_jboss结合spring中如何配置jndi
  8. WebRTC学习与DEMO资源一览
  9. PC浏览器用ckplayer 播放m3u8视频,hls点播功能的简单实现
  10. QQ被盗是怎么一回事?
  11. Contest1480 - ZZNU17级暑期集训——单人挑战赛(Final)(ZZNU 2145AK王国系列问题-百官排序)
  12. html页脚固定,jQuery实现页脚永远固定在页面底部
  13. vscode中用emmet语法a{}*3无法自动换行
  14. CabloyJS微信模块、企业微信模块已出齐
  15. java数据仓库的生鲜配送系统
  16. Monte Carlo Method
  17. 使用Word2Vec完成基于文本相似度的推荐
  18. Unity适配IOS刘海屏
  19. 文储研习社第20期 | 关于对区块链培训的一些思考
  20. 38、EST序列拼接流程

热门文章

  1. 互联网及移动互联网五大趋势及未来创业蓝海
  2. python 音乐编程,python插入音乐进行播放的方法
  3. kube-flannel版本从v0.12.0升级到v0.15.1
  4. bitset 优化dp
  5. 基于Android的手机通讯录设计
  6. 金蝶云星空与奇门WMS-AWMS-委外领料单对接出库单
  7. 蓝桥杯 让我怎能过大年 python 计算汉字代表的数字
  8. 直播带货,救不了新东方
  9. c语言c 检测某文件是否存在,C语言-判断文件是否存在
  10. akoj-1270-LOL之盲僧GANK