目录

起源

c语言实现


起源

法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。

一次只移动一片,不管在哪根针上,小片必须在大片上面。

c语言实现

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>static int count = 0;//计数器void move(int n,char A,char C){printf("将%d号盘子从%c移动到%c\n", n, A, C);count++;}void hannio(int n, char A, char B, char C){int count = 0;int i = 0;if (n == 1){move(n,A,C);printf("将%d号盘子从%c移动到%c\n", n,A,C);}else{hannio(n - 1,A,C,B);//借助C将n-1个从A移到Bmove(n, A, C);//将最大那个从A移到Channio(n - 1, B, A, C);//借助A将n-1个从B移到C}}int main(){char ch1 = 'A';char ch2 = 'B';char ch3 = 'C';int n = 0;scanf("%d", &n);hannio(n,'A','B','C');printf("总共移动%d次\n", count);return 0;}//代码分析://n = 3为例//n = 3不满足n = 1条件, 进入else//hannio(3, A, B, C) A - A B - B C - C//     hannio(2, A, C, B) A - A B - C, C - B 此时B里面是C, C里面是B//             hannio(1, A, C, B)  A - A B - B C - C//                    printf 将1号从A移动到C n = 1 执行if语句//             printf("将%d号盘子从%c移动到%c\n", n, A, C)此时n为2  A - A B - C, C - B 将2号从A移到B//             hannio(1, B, A, C); B里面存放的是C, A里面存放的是A, C里面存放的是B 把C传给A, 把A传给B, 把B传给C A - C B - A C - B//                    printf 将1号从A移到C 即从C移到B//printf n = 3执行完毕, 此时n = 3, 将3号从A移到C//     hannio(2, B, A, C) A-B B-A C-C//             hannio(1, A, C, B) A-B B-C C-A A里面是B赋给A C里面是C赋给C B里面是A赋给C//                    printf 将1号从B移到A//             printf 此时n=2 将2号从B移到C//             hannio(1, B, A, C); A-A B-B C-C 将一号从A移到C

将1号盘子从A移动到C
将1号盘子从A移动到C
将2号盘子从A移动到B
将1号盘子从C移动到B
将1号盘子从C移动到B
将3号盘子从A移动到C
将1号盘子从B移动到A
将1号盘子从B移动到A
将2号盘子从B移动到C
将1号盘子从A移动到C
将1号盘子从A移动到C
总共移动7次

汉诺塔c语言实现及分析相关推荐

  1. c语言程序代码应缩进几格,汉诺塔c语言程序代码

    汉诺塔c语言程序代码(通过vc++6.0验证)(附讲解) 让我们先看看代码吧 #include int hj(int a,int b, int c,int i) { int t; if(i==1) p ...

  2. 汉诺塔c语言源程序步骤,汉诺塔问题的算法分析及C语言演示程序的实现

    摘要:该文对经典的"汉诺塔"问题进行了详细的分析,并用C语言实现.通过问题的具体实现,使学习者了解问题的全过程,推广到一般. 关键词:汉诺塔;递归;C语言 中图分类号:TP301. ...

  3. 汉诺塔问题的求解与分析

    一.递归算法介绍 这篇文章讲的是一个古老而又经典的汉诺塔问题,他是递归算法的一个很好的应用实例.有关递归函数的介绍,在使用递归函数求解字符串的逆置问题文章中介绍过.递归思想是来解决可计算问题的,他的根 ...

  4. 汉诺塔C语言递归实现

    相信每一次学习C语言的同学都会遇到获诺塔问题,我学习C语言也已经有一段时间了,最近遇到了这个经典的问题,下面来总结一下!! 盘子个数n 步骤次数 1 1 2 3 3 7 4 15 ...... ... ...

  5. HDOJ 汉诺塔系列(递推分析)

    汉诺塔V http://acm.hdu.edu.cn/showproblem.php?pid=1995 设当有N个盘子时,第i个盘子从一个柱子移到另一个柱子需要移动的步数为f[n,p],则有:当N=p ...

  6. 汉诺塔c语言做法:汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题。它来自于印度神话。上帝创造世界时作了三根金刚石柱子,在第一根柱子上从下往上按大小顺序摞着64片黄金圆盘

    汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题.借助c杆将所有的圆盘移到b杆上,每次只能移一个,且小的盘子一定在大的盘子上面 它来自于印度神话.上帝创造世界时作了三根金刚石柱子,在第一根柱子上 ...

  7. 递归 汉诺塔 C语言

    # include <stdio.h>/* 递归:条件:1. 有正确(明确)的终止条件2. 该函数处理的数据规模必须递减3. 这个转化必须是可解的特点:易于理解速度慢存储空间大1.汉诺塔( ...

  8. 四柱子汉诺塔c语言程序代码,汉诺塔n=4(4个盘)c语言递归编程代码

    满意答案 /**************************** 汉诺塔的算法就3个步骤: 第一,把a上的n-1个盘通过c移动到b. 第二,把a上的最下面的盘移到c.a成了空的. 第三,因为n-1 ...

  9. 汉诺塔c语言执行步骤详解,详解汉诺塔执行过程

    问题补充: 能否从以下开始详细像上面那样说明一下程序的运行过程吗?本人主要不知道函数的运行过程. 返回B第一次调用 6,向下执行,执行完毕,返回A第一次调用 7,本次函数中p=a,q=b,r=c,m= ...

最新文章

  1. 笔记-项目质量管理-过程决策程序图法
  2. python登录代码思路_终于找到一个思路比较清晰的可以模拟登录百度的代码!
  3. JS window对象 Location对象 location用于获取或设置窗体的URL,并且可以用于解析URL。 语法: location.[属性|方法]...
  4. 有了商城源码如何部署到本地服务器_怎么将本地做好的网站部署到服务器上?...
  5. SpringBoot中fastJson返回数据展示null字段(响应值为null时字段被过滤)
  6. Linux关机运行的脚本,Linux 关机 脚本
  7. testbench文件显示波形_modelsim仿真没有波形或看不到波形的原因及解决方法 - 全文...
  8. 在Power BI Desktop中实施星型架构
  9. 加入rtp组播_耗时10+小时撰写 带你系统认识组播 收藏这些概念
  10. 3h精通OpenCV(三)-重调大小与图像裁剪
  11. C# 自定义网格 dataGridView 禁止编辑 + 禁止自动生成新列 + 禁止生成新行 + 禁止删除行 + 禁止多选 + 禁止行选中 + 禁止改变列宽度 行高度
  12. Flash CS6 专业版破解教程、Flash CS6 激活序列号、破解补丁
  13. 英雄联盟一直连接不上服务器连接异常,lol服务器连接异常 英雄联盟老是与客户端失去连接...
  14. mmclassification使用步骤与心得/ACCV实验记录
  15. 人车交叉作业预警系统
  16. 用JAVA写出1到999的随性化数_OO第一单元——谜之随性总结
  17. Android悬浮窗初探声音处理相关总结
  18. 2021美亚杯个人赛记录
  19. 如何在网站左侧和右侧的漂浮图片上添加QQ咨询、旺旺、微博、电话?
  20. 红警代码在GitHub竟然开源了,很强!

热门文章

  1. 2019小米IoT安全峰会-曾颖涛《蓝牙安全之第二战场》
  2. React高阶组件的封装和使用
  3. C++键盘输入创建链表
  4. 任意文件包含漏洞(1)
  5. Microapp 接入vite子应用
  6. 樱花相册炫酷3D(含背景音乐)
  7. 全球及中国棕榈酰谷胺酸钠行业需求态势及发展趋势预测报告(2022-2027)
  8. 数据库学习:高并发数据库设计
  9. Vue路由无痕浏览 - nodeJs环境搭建
  10. OpenCV基础操作_图片读取和保存