C语言案例——汉诺塔问题

汉诺塔c语言_C语言案例汉诺(Hanoi)塔问题 2020.08.14C语言分享●●●#01#前言C语言案例---汉诺(Hanoi)塔问题【引】【汉诺(Hanoi)塔问题】据说创世纪时Benares有一塔波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依次由小至大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,... 阅读详情

题目描述

  1. 每次只能移动一个圆盘
  2. 大的圆盘不能放在小的圆盘上面
  3. 可以使用一根额外的柱子作为辅助

默认三个柱子,盘子数量为N,

解法思路

设A\B\C三个柱子

将A柱上的n个盘子挪到C柱上,只有一个盘子的时候,只需从A挪到C。如果盘子的数量大于两个,将n-1个盘子从A挪到B,再将最下面的那个盘子从A挪到C 再将B上的n-1个盘子挪到C上 ......

解法代码

#include <stdio.h>  

void move(int num, char x, char y)
{
    printf("第%d个盘子,%c--->%c\n", num, x, y);
}

void hannot(int num, char A, char B, char C)
{
    if (num == 1)
    {
        move(num, A, C);
    }
    else
    {
        hannot(num - 1, A, C, B);
        move(num, A, C);
        hannot(num - 1, B, A, C);
    }
}

int main()
{
    int num = 0; // 盘子数量  
    printf("请输入盘子的数量: ");
    scanf("%d", &num);
    hannot(num, 'A', 'B', 'C'); // A起始位置,B中转位置,C目标位置  
    return 0;
}

运行结果

请输入盘子的数量:
3
第1个盘子,A--->C
第2个盘子,A--->B
第1个盘子,C--->B
第3个盘子,A--->C
第1个盘子,B--->A
第2个盘子,B--->C
第1个盘子,A--->C

AWS入门实践-如何在AWS云上创建一个内外网隔离的生产环境 在 AWS 上建立一个内外网分离的生产环境,可以减少应用服务的暴露面,有效的保证你的应用服务器的安全。通常我们会将web应用放在外网的子网内,数据库服务器等放在内网的子网。我们将按照下图来部署动手实践环境,实现在public subnet的EC2虚拟机可以直接通过互联网可以访问,在Private subnet的EC2虚拟机不能通过互联网直接访问,但是却可以在内部来访问互联网安装应用等等。 阅读详情

相关推荐

Halcon 3D视觉实战:5步将线激光高度数据转为可分析的深度图与点云

本文详细介绍了如何利用Halcon平台将线激光高度数据转换为深度图与点云的5步实战方法。通过具体代码示例和工业检测案例(如锂电池胶水测量),帮助工程师高效处理3D视觉数据,实现从原始数据到三维可视化的完整技术链路。

weixin_29039773的博客 361

分治算法樊塔问题c语言,分治算法案例一:汉诺塔

汉诺塔实验内容设a, b, c是3个塔座:开始时,塔座a上有n个自上而下、由小到大地叠在一起圆盘,各圆盘从小到大编号为1, 2, …, n,现要求将塔座a上的这一叠圆盘移到塔座b上,并仍按同样顺序叠置,移动圆盘时遵守以下移动规则:规则1:每次只能移动1个圆盘;规则2:不允许将较大的圆盘压在较小的圆盘之上;规则3:在满足移动规则1和2的前提下,可将圆盘移至a, b, c中任一塔座上。(1) 算法设计...

weixin_35044481的博客 541

告别手绘!用Aseprite+Unity Tilemap,从AI生成到2D游戏地图的保姆级搭建流程

本文详细介绍了如何利用Aseprite和Unity Tilemap从AI生成素材到搭建2D游戏地图的完整流程。涵盖AI生成素材的预处理、图层管理、动画制作,以及Unity中的Tilemap系统配置和性能优化技巧,帮助开发者高效创建像素风游戏地图。

weixin_29015483的博客 584

C语言函数:函数递归详解(递归太难理解?用经典案例之[青蛙跳台阶]和[汉诺塔]问题例彻底掌握C语言递归)

在,简单说就是,把一个大型复杂的问题层层转化为一个与原问题相似但规模较小的简单的子问题,直到子问题不能再被转化为止,这就是函数递归。调用方式是不是如下图所示呢?在这里可以结果会是什么呢?这里也没有结束的条件,是无限打印还是只打印几行呢?显然,当我们运行时,会发现它只打印几行,并且出现如下异常,这就是。在了解函数递归的概念之后,我们先来了解一下什么叫栈溢出?是由于程序在栈上使用的内存超过其分配空间而导致的错误。

2301_76937176的博客 1491

腾讯滑块验证码collect参数逆向与JSVMP对抗实战

本文深入解析腾讯滑块验证码collect参数的逆向过程与JSVMP虚拟机对抗技术。通过详细的环境搭建、抓包分析和JSVMP逆向技巧,揭示collect参数的生成逻辑与加密流程,并提供完整的模拟实现方案和常见问题排查方法,助力开发者突破腾讯天御验证码的防护机制。

weixin_29009501的博客 1578

S7-1200与KINCO伺服通信实战:CM CANopen模块配置避坑指南(附完整PDO映射表)

本文详细解析了西门子S7-1200 PLC通过CM CANopen模块与KINCO伺服驱动器的通信配置全流程,重点解决PDO映射混乱、心跳报文配置错误等常见问题。提供硬件组态、参数设置、PDO映射模板及故障排查方案,助力工业自动化系统实现稳定高效的多轴运动控制。

2y3u4i5o6p的博客 1102

C语言递归之汉诺塔(梵塔)问题

C语言递归之汉诺塔(梵塔)问题 #include<stdio.h> void hanoi(int n,char one,char tw,char three) { int n; printf("input the numbers of disks\n"); main() { }

September_C的博客 1482

腾讯股票接口API(1)——根据股票代码获取详情

获取股票简要信息,找来找去也没有找到官方的文档,都是复制粘贴的,这里先简单记录一下。 1.简要信息 以贵州茅台为例: http://qt.gtimg.cn/q=s_sh600519 // sh600519是贵州茅台的股票代码,根据自己的关键字拼接URL 可以直接在Android项目中请求,会得到如下一串字符串: v_s_sh600519="1~贵州茅台~600519~2075.95~42.95~2.11~38930~794942~~26078.04~GP-A"; 这里v_s代表简要信息,sh600519

GeofferySun的专栏 6万+

用函数递归的方法解决汉诺塔问题

函数递归算法的运用有一个经典例题,那就是汉诺塔问题,接下来就让我们一起来看看如何用函数递归来解决汉诺塔问题叭! 汉诺塔问题的起源: 汉诺塔(又称河内塔)问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。面对庞大的数字(移动圆片的次数)18446744073709551615,

2021dragon的博客 8956

CATIA_DELMIA_V5R2019安装包下载及安装教程破解

CATIA_V5R2019/DELMIA_V5R2019安装包下载及安装教程破解

一只机械工装熊的博客 8378

深度学习之目标检测--Pytorch实战

只需要能看懂python代码,就能最快入门深度学习---目标检测。目标检测简单的玩玩儿还行,模型调优,调参,还需要一定的数学功底。通过代码来实现卷积,池化,非线性激活,正则化,归一化,能让人减少对大量数学公式的敬畏,手写神经网络也是考研复试中上机考试的压轴题,掌握搭建神经网络和如何训练模型是需要掌握的基础的

需要远程指导仿真实验、代码有问题的,请后台私信或者关注公众号 1万+

C语言 关于汉诺塔

汉诺塔 下面的定义摘自维基百科: 有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆: 1.每次只能移动一个圆盘; 2.大盘不能叠在小盘上面。 如图所示 采用递归的方式演示该步骤。 源代码: #include <stdio.h> #include <windows.h> #pragma warning (...

dalong1996的博客 312

基于STM32L4XX、HAL库的 ATGM336H GPS定位模块驱动程序设计

/ 转换为km/h。// 定位状态: 0=无效, 1=GPS定位, 2=差分定位。// GPS解析数据。支持GPS/BeiDou/GLONASS/Galileo/QZSS多系统联合定位。// 回调函数(需要在HAL_UART_RxCpltCallback中调用)// 地面速度(km/h)// 海拔高度(m)

zhusl6688的博客 794

c语言 递归算法解决汉诺塔问题

用递归解决汉诺塔问题

美酒爱尔兰的博客 6659

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

汉诺塔的图形打印实现c

汉诺塔的图形实现是递归调用的经典案例。递归有线性递归和树状递归两种。汉诺塔属于树状递归。 游戏中的寻路会经常应用递归 。递归应用有普遍的模式即为MVC模式。 M:move移动数据; V:view视图初始化和显示数据; C:control控制设计如何显示。 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <st...

zjy425500828的博客 354

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

c语言例子(四)汉诺塔递归实现

c语言例子(四)汉诺塔递归实现 汉诺塔 作为c语言的经典例子 很值得初学者 学习 #include&lt;stdio.h&gt; void hannuo(int n,char one,char two,char three) { if(n==1)yidong(one,three); else { hannuo(n-1,one,three,two); yidong(one,three)...

u012421714的博客 809

超简单容易理解的n阶汉诺塔问题

//n阶汉诺塔问题(递归算法) #include"stdio.h" void Hani(int n,char a,char b,char c)//通过c将n个盘子从a->b { if(n==1) { printf("%c->%c\n",a,b); } else { Hani(n-1,a,c,b);//先通过b将n-1个盘子从a->c printf("%c->%c\n",a,b);//再直接将最后一个盘子从a-&g

qq_43776544的博客 478

汉诺塔

汉诺塔

zhang_kai_的博客 3534

汉诺塔--递归函数--C语言

汉诺塔 移动盘子小游戏 递归函数调用 //// 汉诺塔: 有三根针A、B、C。A针上有N个盘子,大的在下,小的在上,要求把这N个盘子从A针移到C针,在移动过程中可以借助B针,每次只允许移动一个盘,且在移动过程中在三根针上都保持大盘在下,小盘在上。 1. 将A 上n-1个盘子移到 B针上(借助C针);2.把A针上剩下的一个盘子移到C针上; //3.将n-1个盘子从B针移到C针上(借助A针...

weixin_45661800的博客 318

汉诺塔算法的递归与非递归的C以及C++源代码

汉诺塔(又称河内塔)问题其实是印度的一个古老的传说。 开天辟地的神勃拉玛(和中国的盘古差不多的神吧)在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用

lniwn 2698

C语言 编程递归实现 汉诺塔

汉诺塔基本思想为无论是多少盘子都通过递归转换成只有2个盘子的情况进行移动(基本规则,所有碟子从上到下依次增大,移动时大盘子不能放在小盘子上面,且一次只能移动一个盘子)此代码参照下图(目标是将盘子从A全部移动到C)源代码: #include<stdio.h> #include<stdlib.h> void Move(char a, char b)//显示移动过程 { ...

qq_41574298的博客 167

使用C语言实现汉诺塔问题——递归

汉诺塔递归——C语言

Peng_Kun的博客 1310

18938 汉诺塔问题

汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。由于条件是一次只能移动一个盘,且不允许大盘放在小盘上面,所以64个盘的移动次数是:18,446,744,073,709,551,615。

Caitlin_lee_的博客 511

C语言递归实战:汉诺塔与青蛙跳台阶

c语言初学者尝试解决汉诺塔问题和青蛙跳台阶问题

2203_75629825的博客 447

汉诺塔问题

汉诺塔问题

Drise_的博客 170

汉诺塔移动过程c语言,汉诺塔移动过程(C语言)

分析:假设我们在A柱子上有8个圆盘需要移动到C柱子上面,那么利用递归思想,我们只需要先将上面的7个圆盘移动到B柱子上,然后将最底下的圆盘移动到C柱子上,再将B柱子上的圆盘移动到C柱子上,此时,A盘已经空着了,就变成了辅助柱子。具体代码:#include void HanoiTower(int n, char source, char temp, char target) {if (n < 1...

weixin_34800530的博客 689

C语言递归算法实现经典例题

新星计划:数据结构与算法,学习笔记,创作打卡1!本文主要是用递归算法解决几个经典问题,包含实现斐波那契数列、汉诺塔、求子集、归并排序等经典问题。

墨城烟柳ベ旧人殇的博客 2491
上一篇: C语言案例——青蛙跳台阶问题
下一篇: C语言——函数栈帧的创建和销毁(精简)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

混迹网络的权某

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值