汉诺塔游戏设计过程

合集下载

汉诺塔c源程序实现及讲解

汉诺塔c源程序实现及讲解

• 3操作指南:在挂有圆盘的柱子上方点击 向上按钮‘ W ’ 或者‘ UPDOWN’按键 选中圆盘,按左右移动键移动到相对应 的柱子上方,按向下键放下圆盘,至此 完成一次圆盘移动。
二、设计思路及程序设计流程
• 1 设计思路:本设计中将盘子的数目设 定为3~9个。设三个柱子A、B、C 移动的过程可分解为三个步骤: 第一步 把A上的n-1个圆盘移到B上; 第二步 把A上的一个圆盘移到C上; 第三步 把B上的n-1个圆盘移到C上; 其中第一步和第三步是类同的。 其实际思想是利用一个递归原理。
• • • • • • • • • • • • • • • • • • •
• • • • • • • • • • • • • • • • • • • • • • •
void Start_Logo()/*启动标志*/ { F(3,8); B(200,150,439,259); S(7); R(201,151,442,262); S(WHITE); R(199,149,440,260); settextstyle(DEFAULT_FONT,HORIZ_DI R,2); O(233,180,"HANOI TOWER"); S(1); O(232,179,"HANOI TOWER");
• • • • • • • • • • • • • • • • • • • • • • • • • • • • •
void ShowInfo(int nRn,int nWhetherGetDisk) { F(1,8); B(230,418,620,428); settextstyle(DEFAULT_FONT,HORIZ_DIR,1); S(CYAN); if(nRn==0&&nWhetherGetDisk==0) O(235,419,"YOU NOW AT THE FIRST ROD"); else if(nRn==1&&nWhetherGetDisk==0) O(235,419,"YOU NOW AT THE SECOND ROD"); else if(nRn==2&&nWhetherGetDisk==0) O(235,419,"YOU NOW AT THE THIRD ROD"); else if(nWhetherGetDisk==1) {S(YELLOW); switch(nRn) {case 0 :O(235,419,"YOU GET THE TOP DISK AT THE FIRST ROD");break; case 1 :O(235,419,"YOU GET THE TOP DISK AT THE SECOND ROD");break; case 2 :O(235,419,"YOU GET THE TOP DISK AT THE THIRD ROD");break; default:break; } } else if(nRn==3&&nWhetherGetDisk==nBaseNum) {S(WHITE);O(235,419,"YOU SHOULD DO YOUR BEST");} else if(nRn==3&&nWhetherGetDisk==nBaseNum*2) O(235,419,"YOU SEEMS PLAY NOT VERY GOOD...^_^"); else if(nRn==4&&nWhetherGetDisk==0) {S(13);O(235,419,"O.K YOU HAVE FINISHED YOURWORK");sleep(1);} else O(235,419,"YOU HAVE GET DOWN THE DISK"); }

精编中小学生综合实践活动《汉诺塔》活动设计

精编中小学生综合实践活动《汉诺塔》活动设计

(二)介绍玩法,自主探索。

(1)介绍规则师:大家看,这就是我们要玩的汉诺塔。

为了操作方便,我们把这3根柱子分别叫A柱、B柱、C柱。

A柱上的这10个环从上到下从小到大依步叫1环2环3环……10环。

你能不能借助B柱把A柱上的圆环移到c柱而不改变圆环的上下顺序,最少需要移动多少步。

师:刚才故事中僧侣们是按照什么样的法则来移动金环的?生:一次只移动一个金环。

不管在哪根柱子上,小金环必须在大金环上面。

(2)强调游戏规则:师:一步只能移动一个金环。

不管在哪根柱子上,小金环必须在大金环上面。

(板贴)一次一环,大不压小师:同桌两人相互说一下法则。

(PPT展示法则,老师在教具汉诺塔上只放一个环)(三)引导探究,尝试游戏师:这个汉诺塔上有64个金环,要一个一个操作,感觉怎么样?生:太麻烦了。

生:可以从较少的数量入手。

师:也就是把问题化繁为简,你真聪明!(板书:化繁为简)那师:那怎么办?(二)介绍玩法,自主探索。

(1)介绍规则师:大家看,这就是我们要玩的汉诺塔。

为了操作方便,我们把这3根柱子分别叫A柱、B柱、C柱。

A柱上的这10个环从上到下从小到大依步叫1环2环3环……10环。

你能不能借助B柱把A柱上的圆环移到c柱而不改变圆环的上下顺序,最少需要移动多少步。

师:刚才故事中僧侣们是按照什么样的法则来移动金环的?生:一次只移动一个金环。

不管在哪根柱子上,小金环必须在大金环上面。

(2)强调游戏规则:师:一步只能移动一个金环。

不管在哪根柱子上,小金环必须在大金环上面。

(板贴)一次一环,大不压小师:同桌两人相互说一下法则。

(PPT展示法则,老师在教具汉诺塔上只放一个环)(三)引导探究,尝试游戏师:这个汉诺塔上有64个金环,要一个一个操作,感觉怎么样?生:可以从较少的数量入手。

师:也就是把问题化繁为简,你真聪明!(板书:化繁为简)那生:太麻烦了。

师:那怎么办?(二)介绍玩法,自主探索。

(1)介绍规则师:大家看,这就是我们要玩的汉诺塔。

小学数学思维拓展游戏《汉诺塔游戏》教学设计

小学数学思维拓展游戏《汉诺塔游戏》教学设计

小学数学思维拓展游戏《汉诺塔游戏》教学设计江阴市长泾实验小学执教老师:周洁教学内容:思维拓展游戏《汉诺塔游戏》教学目标:1.通过游戏激发学生学习数学的兴趣,使学生更喜欢数学,培养学好数学的信心。

2. 在游戏过程中,发展学生逻辑思维的能力,学会通过目标的分解来解决问题。

3. 在游戏过程上,逐步体会研究规律对学习的重要性,在规律的指导下获得成功的体验。

教学准备:微课介绍汉诺塔游戏的起源和游戏规则;下载汉诺塔游戏程度。

教学过程:一,导入游戏1.同学们,你们喜欢数学吗?为什么呢?老师今天要给大家介绍一个数学游戏——汉诺塔游戏。

汉诺塔问题在数学界有很高的研究价值,而且至今还在被一些数学家们所研究。

它是一种益智游戏,玩这个数学游戏一定会让你变得更聪明,课前我们已经通过微课了解了这个游戏的起源和游戏规则,让我们再来回顾一下。

2.你都看明白了吗?谁愿意把自己的理解与大家分享3.下面老师给大家5分钟时间,请从最简单的游戏开始,看你能闯过几关,注意每次都要把自己完成游戏的步数记录下来,如果当步数特别多的时候,我们就认为游戏失败了,那么就重新来过,清楚了吗?4.老师来随机采访几位同学:A:你玩到了第几个圆盘,用了几步?B:你失败过吗?为什么会失败?在刚才的游戏过程中,有些同学用了较多的步数,有些同学还失败了几次,看来这个游戏里还蕴藏着很多我们没有发现的奥秘呢,让我们从最简单的地方开始。

【技术应用:课前通过发送微课,让学生先了解游戏起源和规则,并试玩游戏。

在试玩的过程中,学生对圆盘移动的规则能有初步的了解,也能对游戏的规律有初步的体会和感知。

虽然这个感知还比较模糊,但在思维过程中,这种模糊的感知,是进一步探究和学习的基础,为课堂节约了很多时间,从而使课堂的目标直奔规律的探究。

】二,初步感知1.如果只有一个圆盘,那该怎样移动呢?2.如果有两个圆盘,该怎样移动呢?如果第1个圆盘移到2号那会怎样呢?小结:我们的目标是3号柱子,我们就称它为目标塔,中间第2根柱子是帮助我们完成任务的,我们就称它为辅助塔。

小学教学设计:汉诺塔

小学教学设计:汉诺塔

汉诺塔百度资料:汉诺塔的操作,即每次都是先将其他圆盘移动到辅助柱子上,并将最底下的圆盘移到c柱子上,然后再把原先的柱子作为辅助柱子,并重复此过程。

这个过程称为递归。

一、听神话故事①猜测②验证:怎样研究?③化繁为简,从简单的开始研究二、探究1.介绍汉诺塔的结构,了解游戏规则2.尝试在操作中体验方法①1个圆盘,怎么移到终点?生1:直接移到目标杆生2:先移到中介杆,再移到目标杆记录:圆盘块数第一步移到什么杆最少次数1 目标杆 1②猜想:2个圆盘,应该是几步?请学生上来移一移记录:圆盘块数第一步移到什么杆最少次数2 中介杆 3次操作:2块圆盘,把刚才的过程操作一遍。

要求:喊开始,开始玩,喊结束,手离开玩具。

如果按时完成,在星星板上画一颗星。

③变:改变目标杆和中介杆的位置,发现什么变化?师:在头脑里先移一移,然后动手操作接着电脑演示④变:要求:头脑中移,再动手。

师:说一说,第二种情况操作中用了几步?生:3步师:第一步移到什么杆?生:移到中介杆师:第三种情况,第一步是移到什么杆?生:移到中介杆师:通过三次操作,你发现了什么?生:位置不管怎么变,它永远是3步。

生:每一次第一颗珠子都是移向中介杆,都用了3步。

生:如果奇数……如果偶数评价:你的想法很独特,请你先保留你的想法⑤3块圆盘,师:在头脑中先移一移,再动手操作。

纠错:学生将大圆盘放置小圆盘上面反馈:你们用了几步?生1:7步生2:9步请学生上台摆。

板书:圆盘块数第一步移到什么杆最少次数3 目标杆 7课件演示后让学生在头脑中移一移,再操作活动福利:如果你的同桌不会,你教会你的同桌,就可以再得一颗星。

⑥改变杆的位置,分别操作这几种情况。

反馈:第一步是移向哪个杆?有什么发现?师:3个圆盘,为什么是7步呀?3+3+1=7⑦4块圆盘师:如果是4块圆盘呢?先分析这4块圆盘的移法。

师:通过刚才的操作,看看和电脑的方法一样吗?请做好记录。

师:在操作过程中,你觉得哪一步很重要?生1:第一步,如果放错了,就导致第二步都错。

幼儿协作教案:团队协作,完成汉诺塔游戏

幼儿协作教案:团队协作,完成汉诺塔游戏

幼儿协作教案:团队协作,完成汉诺塔游戏完成汉诺塔游戏在幼儿园教育中,幼儿团队协作能力的培养是非常重要的一项教育内容。

而汉诺塔游戏又是一款有着非常好的团队协作培养效果的游戏,因此本文将介绍如何通过幼儿协作教案,帮助孩子们完成汉诺塔游戏。

一、教学目标通过这次的团队协作活动,让孩子们学会如何一起完成任务,学会倾听,学会沟通,学会团结协作。

二、教学准备1.汉诺塔游戏道具2.教师和助教3.一组有不同年龄段孩子的团队三、教学步骤1.了解汉诺塔游戏规则教师需要向孩子们介绍汉诺塔游戏的规则。

大体上,汉诺塔游戏是由3个竖直柱子和一些不同大小的圆盘组成的。

游戏的目标是将所有盘子从一个柱子移动到另一根柱子,但是每一次只能移动一个盘子,盘子上方不能放置更小的盘子。

在这个规则下,孩子们需要想出怎样把所有盘子从一个柱子移动到另一个柱子。

2.准备游戏道具为了让孩子们更好地了解汉诺塔游戏规则,教师需要准备游戏道具。

根据孩子们的不同年龄段和能力水平,可以将游戏道具做成不同大小和形状的,使之更加适合孩子们的理解和操作。

3.分组游戏在道具准备好之后,教师可以将孩子们分成若干组,每组由5-6个孩子组成。

在每个小组中,教师需要任命一名孩子为队长,让他/她负责分配任务和协调团队。

4.开始游戏安排好小组和队长之后,就可以开始汉诺塔游戏了。

帮助孩子们学习如何协同作战,共同完成任务。

这个游戏的难度在于,需要孩子们通过协作的方式来完成任务。

教师可以提供一些指导,让孩子们逐渐学会如何进行有效的沟通和协调,如何利用自己的特长来发挥作用。

5.活动总结在游戏结束之后,教师需要和孩子们一起总结这个活动的过程,分析问题和反思。

也可以根据孩子们的情况和表现,为他们授予不同的评定,让孩子们学会感恩、发现自己的优点和不足。

同时,教师也应该在总结中学习提高自己的教学能力和知识水平,以便更好地为孩子们提供优质教育资源和更多的支持。

四、教学效果通过这次的协作游戏,孩子们学会了如何团结协作,学会了如何理解规则,判断优先顺序,找到最佳策略。

汉诺塔五层步骤教学

汉诺塔五层步骤教学

汉诺塔五层步骤教学汉诺塔是一种经典的逻辑益智游戏,它的规则简单明了,但挑战性却非常高。

本文将为大家详细介绍汉诺塔的五层步骤教学,让大家能够轻松掌握这个游戏。

汉诺塔的起源可追溯到古代印度,而如今它已经成为了世界各地智力游戏爱好者喜欢挑战的项目之一。

汉诺塔的游戏目标是将一堆盘子按照从大到小的顺序从一个柱子移动到另一个柱子上,规则是每次只能移动一个盘子,并且盘子大小不能超过目标柱子上已有的盘子。

下面,我们将分五个步骤详细介绍汉诺塔的游戏过程。

第一步:准备工作在开始游戏之前,我们需要准备三根柱子和若干大小不同的盘子。

最好使用实物或者图像等方式进行实际操作,以便更好地理解游戏规则。

假设我们有五个不同大小的盘子,将它们按照从小到大的顺序放在一根柱子上。

第二步:移动最小盘子首先,我们需要将最小的盘子从初始柱子上移动到目标柱子上,这个步骤相对简单。

将最小盘子从初始柱子上取下,然后放到目标柱子上。

第三步:移动上一层的盘子接下来,我们需要考虑如何移动上一层的盘子。

我们需要利用第三根柱子作为辅助来完成这一操作。

将上一层的盘子移动到第三根柱子上,从而腾出空间给更大的盘子。

第四步:移动最大盘子现在,我们需要将最大的盘子移动到目标柱子上。

将最大盘子从初始柱子上取下,然后放到目标柱子上。

第五步:移动上一层的盘子到目标柱子最后,我们只需要再将上一层的盘子移动到目标柱子上即可完成整个游戏。

将上一层的盘子从第三根柱子取下,然后放到目标柱子上。

通过上述五个步骤,我们可以成功地将五个盘子按照规则从初始柱子移动到目标柱子上。

当然,这只是一个简单的例子,实际的汉诺塔问题可能更加复杂,但解决方法和步骤是相同的。

总结:汉诺塔是一种有趣的益智游戏,通过合理的移动盘子来锻炼我们的逻辑思维能力。

本文通过五个步骤的教学,详细介绍了汉诺塔的游戏过程,并希望读者可以通过实际操作来更好地掌握这个游戏。

希望大家在玩汉诺塔时能够享受到思考和解决问题的乐趣。

汉诺塔教案

汉诺塔教案

汉诺塔教案汉诺塔教案一、教学目标:1. 了解汉诺塔的起源和规则。

2. 掌握求解汉诺塔问题的基本方法。

3. 培养学生的逻辑思维和问题解决能力。

二、教学重点:1. 掌握求解汉诺塔问题的基本方法。

2. 培养学生的逻辑思维和问题解决能力。

三、教学难点:1. 学会将汉诺塔问题的解答规律转化为递归算法。

四、教学准备:1. 讲解课件。

2. 演示汉诺塔游戏。

五、教学过程:Step 1 引入话题通过引入汉诺塔游戏的起源和规则,引起学生的兴趣。

T:大家知道什么是汉诺塔吗?它是中国传统文化中的经典智力游戏。

据说汉诺塔起源于古印度,曾用铜制成。

现在让我们来看一下汉诺塔的玩法。

Step 2 讲解规则T:汉诺塔有三根柱子,A、B、C,其中 A 柱上有几个不同大小的圆盘,较小的圆盘在上,较大的圆盘在下。

游戏的目标是将 A 柱上的圆盘移动到 C 柱上,移动过程中需要遵循以下规则:1. 每次只能移动一个圆盘。

2. 大圆盘不能放在小圆盘上面。

请大家注意,大圆盘不能放在小圆盘上面,这是游戏的关键。

Step 3 演示游戏T:现在,我来演示一下如何解汉诺塔问题。

请大家注意观察。

演示过程中,教师将圆盘按规则进行移动,引导学生观察。

Step 4 求解问题的基本方法T:通过观察,我们发现解决汉诺塔问题的基本方法是递归。

首先,将 A 柱上的 n-1 个圆盘经由 C 柱移动到 B 柱上;然后,将 A 柱上的最大圆盘移动到 C 柱上;最后,将 B 柱上的 n-1个圆盘经由 A 柱移动到 C 柱上。

Step 5 练习T:现在,我们来练习解答一个具体的汉诺塔问题吧。

假设 A柱上有 3 个圆盘,请问需要多少次移动才能将这些圆盘移动到C 柱上呢?学生根据教师的引导,按照递归的思路进行解答,并组织语言进行表达。

六、作业布置:1. 如果 A 柱上有 4 个圆盘,需要多少次移动才能将这些圆盘移动到 C 柱上?2. 思考:如果 A 柱上有 n 个圆盘,需要多少次移动才能将这些圆盘移动到 C 柱上?七、教学反思:通过本次课的讲解和练习,学生对汉诺塔的起源、规则和求解方法有了较深入的了解。

幼儿动手能力教案:DIY汉诺塔游戏

幼儿动手能力教案:DIY汉诺塔游戏

幼儿动手能力教案:DIY汉诺塔游戏汉诺塔游戏随着社会的发展,越来越多的年轻父母开始注重幼儿教育,并从各种途径寻找最合适的教育方式。

其中,动手能力教育不断受到家长和老师的追捧。

动手能力不仅可以提高幼儿的观察能力、判断能力、逻辑推理能力,还可以培养幼儿的想象力和创造力。

因此,今天我将介绍一份非常实用的幼儿动手能力教案——DIY汉诺塔游戏。

一、前期准备1、材料准备:3个大小不同的桶(可用塑料桶或纸杯代替)、一些小的圆木板(10个左右)、胶水或电脑上用的图纸胶等固定工具、饰品等。

2、教具准备:数学板、表示三个圆柱两个竖条和三个竖条的卡片各一张。

二、教学大纲1、介绍和讲解汉诺塔游戏:教师为幼儿介绍汉诺塔的规则和原理,并展示一份汉诺塔的实物。

汉诺塔是一项智力游戏,需要玩家将塔中的圆盘移动到另一只杆子上,但必须保证每根杆子上的圆盘从下到上依次递减,而且一次只能移动一个圆盘,比较非常考验玩家的观察能力和耐心。

2、动手制作汉诺塔:幼儿们分别将三个大小不同的容器粘贴到底座上。

然后再把三个圆木板依次粘贴到每个容器的中心位置。

注意,圆木板大小要和容器大小适应。

将饰品和贴纸放置在桶的周围。

3、游戏规则简介:1)从小到大按顺序把圆桶间的圆代替用圆木板一一的搬到另一个桶内。

每次只能搬动一个,且大圆盘不能放在小圆盘上面。

2)游戏难度可以由幼儿自己设置,比如可以只有两个圆桶,或者可以增加圆盘的数量。

4、分组活动:教师将幼儿分成若干小组,并分别发给每个小组一份汉诺塔游戏。

幼儿们可以自由组合和排列,尝试不同的游戏难度,帮助他们提升观察和逻辑推理能力。

三、教学目标1、通过DIY汉诺塔游戏,提高幼儿的动手能力和手眼协调能力。

2、通过游戏,培养幼儿的观察能力、逻辑推理能力和判断能力。

3、让幼儿在动手制作的过程中,享受学习的乐趣和成就感。

四、教学策略1、通过讲解汉诺塔游戏和制作过程,吸引幼儿的兴趣,提高他们的主动参与意识。

2、通过不同的游戏难度,激发幼儿的求知欲,让他们兴致勃勃地参与游戏。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

兰州交通大学数理与软件工程学院课程设计报告2011 ~2012学年第二学期2012年6月一、实验目的:通过此次C++实训,一方面加深了对C++语言的了解,而不只是单单的在课本中学到的那些理论。

通过学生动手亲自编写,平时乏味的课程,变的生动有趣。

平时在课堂上学到的东西可以自己动手编写,将其转化成一些实用的技能。

另一方面,通过学生小组完成任务,提高团队意识,增加凝聚力,让同学们意识到团结就是力量,每个人都是重要的一份子。

二、题目:汉诺塔游戏程序<1> 问题描述:在平面上有三个位置A、B、C,在A位置上有n个大小不等的圆盘、小盘压在大盘上形成圆盘堆。

要求将A位置的N个圆盘通过B位置移动到C位置上,并按同样的顺序叠放。

移动圆盘时必须遵循以下规则:1.每一次只能移动一个圆盘2.圆盘可以放在A、B、C任何一个塔座上3.任何时刻都不能将大圆盘压在小圆盘上<2> 基本要求:圆盘的个数从键盘输入(如3-64等);用动画的形式在屏幕上显示盘的移动。

三、问题分析和任务定义1、已知有三个塔(1、2、3)和n个从大到小的金碟子,初始状态时n个碟子按从大到小的次序从塔1的底部堆放至顶部。

2、要求把碟子都移动到塔2(按从大到小的次序从塔2的底部堆放至顶部)。

3、每次移动一个碟子。

4、任何时候、任何一个塔上都不能把大碟子放到小碟子的上面。

5、可以借助塔3。

先考虑a杆下面的盘子而非杆上最上面的盘子,于是任务变成了:1、将上面的N个盘子移到b杆上;2、将a杆上剩下的盘子移到c杆上;3、将b杆上的全部盘子移到c杆上。

将这个过程继续下去,就是要先完成移动n个盘子、n-1个盘子、n-2个盘子....1个盘的工作。

四、课题介绍:4.1 汉诺塔问题初始模型:4.2 实现步骤:为满足题目中盘子的移动问题,必须遵循的条件是:一次仅能移动一个盘,且不允许大盘放在小盘的上面。

设要解决的汉诺塔共有N个圆盘,对A杆上的全部N个圆盘从小到大顺序编号,最小的圆盘为1号,次之为2号,依次类推,则最下面的圆盘的编号为N。

第一步:先将问题简化。

假设A杆上只有一个圆盘,即汉诺塔只有一层N,则只要将1号盘从A杆上移到B杆上即可。

第二步:对于一个有N(N>1)个圆盘的汉诺塔,将N个圆盘分成两部分:“上面的N-1个圆盘”看成一个整体,为了解决N个圆盘的汉诺塔,可以按下面图示的方式进行操作:(1)将A杆上面的N-1个盘子,借助B杆,移到C杆上;图4—1(2)将A杆上剩余的N号盘子移到B杆上;图4—2(3)将C杆上的N-1个盘子,借助A杆,移到B杆上。

图4—3五、流程图开始初始化界面、视窗游戏选择界面按键判断Enter键进入游戏选择盘子数目(2—10)开始游戏判断游戏结果Y 继续N 退出盘子数加1 界面、按任意键退出Esc键退出游戏六、源程序代码#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#include<math.h>struct T{int h; //塔的高度int x; //塔的第一个盘的x坐标,y坐标等于(7+n-塔的高度h)int l; //塔的第一个盘的长度}ta[3]={{10,15,2},{0,0,0},{0,0,0}};char hnt[18][79]={{" "}, {" 汉诺塔动画演示 "}, {" "}, {" ╔════════════════════════════════════╗"}, {" ║║"}, {" ║║"}, {" ║║"}, {" ║▆║"}, {" ║▆▆║"}, {" ║▆▆▆║"}, {" ║▆▆▆▆║"}, {" ║▆▆▆▆▆║"}, {" ║▆▆▆▆▆▆║"}, {" ║▆▆▆▆▆▆▆║"}, {" ║▆▆▆▆▆▆▆▆║"}, {" ║▆▆▆▆▆▆▆▆▆║"}, {" ║▆▆▆▆▆▆▆▆▆▆║"}, {" ╚════════════════════════════════════╝"}};int n;int sum=0;int computerorpeople=1;int speed=0;void count_ta_1(int ta_1){int i;int j;int k=0;for(i=7;i<7+n;i++)for(j=4+ta_1*24;j<28+ta_1*24;j++){if(hnt[i][j]!=' '){for(;hnt[i][j+k]!=' ';k++);ta[ta_1].x=j;ta[ta_1].l=k;return;}}}void move(int ta_1,int ta_3){int i;sum++;ta[ta_3].h++;ta[ta_3].x=ta[ta_1].x+(ta_3-ta_1)*24;ta[ta_3].l=ta[ta_1].l;for(i=0;i<ta[ta_1].l;i++){hnt[7+n-ta[ta_3].h][ta[ta_3].x+i]=hnt[7+n-ta[ta_1].h][ta[ta_1].x+i];hnt[7+n-ta[ta_1].h][ta[ta_1].x+i]=' ';}ta[ta_1].h--;count_ta_1(ta_1);system("cls");for(i=0;i<7+n;i++)printf("%s\n",hnt[i]);printf("%s",hnt[17]);printf("\n\n 从%c塔移动一个盘到%c塔\n",ta_1+65,ta_3+65);printf("\n 步数:%d\n\n ",sum);if(computerorpeople==2)system("pause");elsefor(i=0;i<200000*speed;i++);}void hanoi(int ta_1,int ta_2,int ta_3,int m) //递归,ta_1/ta_2/ta_3分别为座塔的代号,m为盘子数{if(m==1)move(ta_1,ta_3); //如果盘子为,将这个盘子从塔座A移动到塔座C else{hanoi(ta_1,ta_3,ta_2,m-1); //将塔座A的前m-1个盘子移到塔座Bmove(ta_1,ta_3); //将塔座A的第m个盘子移到塔座Chanoi(ta_2,ta_1,ta_3,m-1); //将塔座B的m-1个盘子移到塔座C}}void main(){int i;printf("请输入汉诺塔的高度(范围->10):");scanf("%d",&n);printf("请选择:输入由电脑自动控制;\n");printf(" 输入由人控制。

\n");printf("请输入:");scanf("%d",&computerorpeople);if(computerorpeople!=1&&computerorpeople!=2)computerorpeople=1;if(computerorpeople==1){printf("请输入移动盘的速度(例如:输入则代表秒):");scanf("%d",&speed);}if(n<1||n>10)n=10;ta[0].h=n;system("cls");for(i=0;i<7+n;i++)printf("%s\n",hnt[i]);printf("%s\n\n ",hnt[17]);system("pause");hanoi(0,1,2,n);if(computerorpeople==1)system("pause");}七、调试过程八、学习总结与心得通过这次的课程设计,我深入了解了汉诺塔这一经典问题,掌握了两种解决汉诺塔的方法。

同时也更好的掌握了栈思想和函数的创建、调用等知识。

也掌握了一些修改等程序的技巧,这对我以后的学习生涯有很大的帮助。

通过这次的课程设计我深刻的认识到自己所学知识的匮乏,它让我意识到自己的基础很不扎实,需要用功复习,也提醒我要利用大学的时光多充实自己。

当然这次程序设计的并不是很完善,还有地方可以修改。

在下次课程设计中我要努力完善自己的程序不会再出现这一次的不足。

通过汉诺塔问题的C++课程设计,加强了我们动手、思考和解决问题的能力。

在整个设计过程中,经常会遇到这样那样的情况,就是心里想这样的方法可以行得通,但实际运行时,总实现不了,因此耗费在这上面的时间用去很多。

我们做课程设计同时也是对课本知识的巩固和加强,由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个函数的功能,而且考试内容有限,所以在这次课程设计过程中,我们了解了很多函数的功能,并且对于其在程序中的使用有了更多的认识。

通过动手实践让我们对每种定义都印象深刻。

所以,这次的课程设计对我们的作用是非常大的。

通过这个实习,过程曲折可谓一语难尽。

在此期间我们也失落过,也曾一度热情高涨。

总之,在这次课程设计中我学到了很多。

相关文档
最新文档