当前位置:首页 » 《随便一记》 » 正文

C语言实现汉诺塔【图文讲解】

2 人参与  2023年03月28日 18:49  分类 : 《随便一记》  评论

点击全文阅读


在这里插入图片描述

本期介绍?

主要介绍:汉诺塔是什么,汉诺塔的规律,如何用C语言来实现汉诺塔?。


目录

什么是汉诺塔如何用C语言实现汉诺塔

什么是汉诺塔

  汉诺塔(Tower of Hanoi),又称河内塔。源自印度古老传说的一个游戏,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

  若每次移动需要1s的时间,那么请问婆罗门需要多久才能把这64片黄金圆盘从一根石柱上移动到另一个石柱上?
在这里插入图片描述
  若只有1个圆盘时,需要移动1次;若有2个圆盘时,需要移动3次;若有3个圆盘时,需要移动7次……不难看出,汉诺塔步数的数学规律为2的n次方减1(n为柱子上的圆盘个数)。所以若有64个圆盘那将会移动2^64-1次(即:18,446,744,073,709,551,615‬次),若每次移动需要1s时间,则需要将近5849亿年的时间才能够做到。可见大梵天有多恨婆罗门,这绝对是在坑人啊!!!


如何用C语言实现汉诺塔

  现有三个柱子A、B、C,其中有n个圆盘在A柱上,最终要实现把这n个圆盘从A柱借助B柱移动到C柱上。实现实现思路:先将n-1个圆盘从A柱移动到B柱上,然后将A柱上最后一个圆盘移动到C柱上,最后再把B柱上的n-1个圆盘移动到C柱上。如下图所示:

在这里插入图片描述

当n=1时:
1.将A柱上最后一个圆盘移动到C柱上(A →C)

当n=2时:
1.将1个圆盘从A柱移动到B柱上,重复n=1时的步骤,只不过是将那1个圆盘(从A借助于B移动到C)改为(从A借助于C移动到B)
2.将A柱上最后一个圆盘移动到C柱上(A →C)
3.将B柱上的1个圆盘移动到C柱上。重复n=1时的步骤,只不过是将那个圆盘(从A借助于B移动到C)改为(从B借助于A移动到C)

当n=3时:
1.将2个圆盘从A柱移动到B柱上。重复n=2时的步骤,只不过是将那2个圆盘(从A借助于B移动到C)改为(从A借助于C移动到B)
2.将A柱上最后一个圆盘移动到C柱上(A →C)
3.将B柱上的2个圆盘移动到C柱上。重复n=2时的步骤,只不过是将那2个圆盘(从A借助于B移动到C)改为(从B借助于A移动到C)

当n=4时:
1.将3个圆盘从A柱移动到B柱上。重复n=3时的步骤,只不过是将那3个圆盘(从A借助于B移动到C)改为(从A借助于C移动到B)
2.将A柱上最后一个圆盘移动到C柱上(A →C)
3.将B柱上的3个圆盘移动到C柱上。重复n=3时的步骤,只不过是将那3个圆盘(从A借助于B移动到C)改为(从B借助于A移动到C)

以此类推,当汉诺塔上的圆盘数为n个时该如何移动,只需要按照上面的规律一直往上递归,最终是可以达到目的的。程序如下:

#include<stdio.h>void move(char A, char C, int n){printf("把第%d个圆盘从%c--->%c\n", n, A, C);}void HanoiTower(char A, char B, char C, int n){if (n == 1){move(A, C, n);}else{//将n-1个圆盘从A柱借助于C柱移动到B柱上HanoiTower(A, C, B, n - 1);//将A柱子最后一个圆盘移动到C柱上move(A, C, n);//将n-1个圆盘从B柱借助于A柱移动到C柱上HanoiTower(B, A, C, n - 1);}}int main(){int n = 0;printf("输入A柱子上的圆盘个数:");scanf("%d", &n);//将n个圆盘从A柱借助于B柱移动到C柱上HanoiTower('A', 'B', 'C', n);return 0;}

在这里插入图片描述
  若想知道一共移动了多少次圆盘,只需要在move()函数中加一个全局变量来统计个数就行。


在这里插入图片描述

这份博客?如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位?点赞?评论收藏⭐️,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言欧?。


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/56926.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 斗罗v:从逮到千仞雪偷窃开始成神完结版_陈晨胡列娜大反击_小说后续在线阅读_无删减免费完结_
  • 末世开火车,顺便捡了个机械神格高分神作_李昂诺亚独家首发_小说后续在线阅读_无删减免费完结_
  • 云清免费看_云舒小姐太后校园甜文_小说后续在线阅读_无删减免费完结_
  • 军训前,童养媳拿我的病历本给心上人叠纸飞机后,我退婚了完结爽文_杨鹤童养媳阿鹤一口气完结_小说后续在线阅读_无删减免费完结_
  • 未婚夫女兄弟把婚车改成宠物灵车,我反手让她的宾利变破烂最新阅读_魏成鸣乔诗诗林书妍小编推荐_小说后续在线阅读_无删减免费完结_
  • 军训当天男友为校花虐功勋犬,重生后我杀疯了潜力榜_顾野杜璇闻言大结局_小说后续在线阅读_无删减免费完结_
  • 天塌了!大佬们全被我捡回家了阿昭,小白,李惊雪小说整本+后续(阿昭,小白,李惊雪)清爽版阅读
  • 重生八零,我笑看真千金用土气布料卖港商免费阅读_妹妹姜雅沈俊爆款_小说后续在线阅读_无删减免费完结_
  • 秦昭:+后续人物讨喜无套路全集手握一把刀,砍翻万道!
  • 狸奴抓伤阿娘后,我和爹提议换个娘后续_阿爹阿娘宁王最新阅读_小说后续在线阅读_无删减免费完结_
  • 盛夏没有晴天小说(阮苏梨,傅屿安,宋颖)小说结尾+隐藏篇章(盛夏没有晴天阮苏梨,傅屿安,宋颖)畅享阅读
  • 全书浏览天降好运?村西头疯婆子是神医!(李萍萍周大孙月娘)_天降好运?村西头疯婆子是神医!(李萍萍周大孙月娘)全书结局

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1