汉诺塔问题--C语言实现

news2024/11/26 8:47:07

在这里插入图片描述

  • 魔王的介绍:😶‍🌫️一名双非本科大一小白。
  • 魔王的目标:🤯努力赶上周围卷王的脚步。
  • 魔王的主页:🔥🔥🔥大魔王.🔥🔥🔥
    在这里插入图片描述
    ❤️‍🔥大魔王与你分享:对我说过“别走好吗”只有体育老师而已。

文章目录

  • 一、前言
  • 二、思路
  • 三、代码实现
  • 四、总结

一、前言

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

二、思路

这是一个经典的递归问题,学递归的时候一般都会引入这个问题。
我们先自己想出圆盘数为1、2、3时的情况:
1个的话:直接从a移动到c
2个的话,我们需要需要借助b柱,第一步:将上面的移动到b柱,第二部:将下面的移动到c柱,第三步:再让b柱上那个借助a柱移动到c柱,也就是需要三步。
3个的话,这个的递归思想就比较容易发现了,首先将上面的两个(也就是n-1个)看作一个整体,就相当于上面的2个圆盘的情况了,(对应着上面的理解)不过这个的第一步和第三步都是移动的两个圆盘,所以不能直接移动,又把两个的分为一个加一个,如下图请添加图片描述

更多的话类比就ok,都是一样的。

三、代码实现

//汉诺塔
#include <stdio.h>

void move(char a, char c)
{
	printf("%c->%c\n", a, c);
}
void Hanoi(int n,char a,char b,char c)
{
	if (n == 1)  //如果递归拆解到n=1,那么就直接从原位置移动到目标位置。
		move(a, c);
	else  //如果n>1,还是要继续递归,因为一次只能移动一个圆盘,而且也要符合要求(小的在大的上面)
	{
		Hanoi(n - 1,a,c,b);  //将n-1个移动到辅助位置
		move(a, c);  //将最后一个移动到目标位置
		Hanoi(n - 1, b, a, c);  //将移动到辅助位置的这些再移动到目标位置
	}
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	Hanoi(n,'A','B','C');
	return 0;
}

四、总结

在这里插入图片描述

✨请点击下面进入主页关注大魔王
如果感觉对你有用的话,就点我进入主页关注我吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/429310.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法:什么是队列 用两个栈实现一个队列

题目 用两个栈实现一个队列。 队列、栈是一类&#xff0c;都是抽象模型 数组、链表是一类&#xff0c;都是具体实现 队列 逻辑结构&#xff0c;抽象模型&#xff0c;可以用任何语言来实现 先进先出add、delete、length 用数组来模拟 const queue [] // 入队 queue.push(…

Python实现哈里斯鹰优化算法(HHO)优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 2019年Heidari等人提出哈里斯鹰优化算法(Harris Hawk Optimization, HHO)&#xff0c;该算法有较强的全…

MySQL数据库的操作

MySQL数据库的操作 创建数据库 语法 create database [if not exists] db_name [create_specification,create_specification...]create_specification:[default] charactter set charest_name[default] collate collation_name 说明&#xff1a; []可选项 specification 特…

【智能座舱系】-智能座舱平台研究|各家主机厂都在使用的主流座舱软件平台

一、何为汽车智能化 以智能化和网联化的技术赋能车辆,实现车辆对复杂环境的有效感知和识别,实现对车辆与驾乘人员、对其他车辆、对其他基础设施的智能化交互。 二、智能的两大核心功能:智能化和网联化 智能化方面,汽车具备智能的人机交互,如语音、手势、图像及其他生物…

电脑开机无限重启,到了欢迎界面就黑屏重启

windows7系统&#xff0c;开机过程中&#xff0c;只要一过了四叶草&#xff0c;要么刚出来欢迎界面&#xff0c;要么还没出来就黑屏&#xff0c;然后重启&#xff0c;然后无限循环。。。 (经测试xp系统同样有效) 先尝试用方法1修复&#xff0c;若不行再用方法2。 方法1&…

【微服务中间件学习】redis基础及项目使用

背景 最近跟着大佬学习&#xff0c;发现之前都是一知半解&#xff0c;还是得系统学一下。 重温redis&#xff0c;有一下整理Redis是一种基于内存的高性能键值存储系统&#xff0c;它支持多种数据结构和持久化方式&#xff0c;并提供了许多高级功能&#xff0c;如发布/订阅、事…

Go项目布局建议

我们编写的 如果是Go 程序都是简单程序&#xff0c;一般由一个或几个 Go 源码文件组成&#xff0c;而且所有源码文件都在同一个目录中。但是生产环境中运行的实用程序可不会这么简单&#xff0c;通常它们都有着复杂的项目结构布局。弄清楚一个实用 Go 项目的项目布局标准是 Go …

21_I.MX6ULL_PWM背光实验

目录 LCD背光调节简介 相关寄存器 实验源码 LCD背光调节简介 正点原子的三个RGB LCD都有一个背光控制引脚,给这个背光控制引脚输入高电平就会点亮背光,输入低电平就会关闭背光。假如我们不断的打开和关闭背光,当速度足够快的时候就不会感觉到背光关闭这个过程了。这个正好可…

jmeter数据库连接6

1&#xff0c;准备资料1. 一个可用的数据库2.连接数据库需要的驱动 2,jmeter连接数据库3&#xff0c;发送插入语句请求4&#xff0c;发送查询语句请求5&#xff0c;发送删除语句请求6,对数据库进行压测本文永久更新地址: 1&#xff0c;准备资料 1. 一个可用的数据库 搭建一个…

笔试强训之【不要二和字符串转换为数字】

目录1.不要二1.1题目1.2解题思路1.3代码2.字符串转换为数字2.1题目2.2思路讲解2.3代码1.不要二 1.1题目 链接: link 描述 二货小易有一个W*H的网格盒子&#xff0c;网格的行编号为0-H-1&#xff0c;网格的列编号为0~W-1。每个格子至多可以放一块蛋糕&#xff0c;任意两块蛋糕…

加载美女图片之OpenCV 图像读取与显示

&#x1f4d6;作者介绍&#xff1a;22级树莓人&#xff08;计算机专业&#xff09;&#xff0c;热爱编程&#xff1c;目前在c&#xff0b;&#xff0b;和openCv阶段>——目标Windows&#xff0c;MySQL&#xff0c;Qt&#xff0c;数据结构与算法&#xff0c;openCv&#xff0…

优思学院|精益生产与 IE 两者有何分别?

精益生产或者精益管理和工业工程&#xff08;IE&#xff09;在工具和方法方面有一些相似之处&#xff0c;也它们也有一些相同的工具&#xff0c;但在思维方式、性质、历史和最近的发展也有一些重要的差异&#xff0c;优思学院会就这几个方面详细为大家作出区分。 思维方式 IE是…

介绍一款功能强大的步进电机控制驱动芯片TMC5240

步进电机由于具有控制简单&#xff0c;良好的速度和位置控制被大量用在工业自动化、医疗设备、仪器仪表、实验室自动化、办公自动化、智能家居......等众多行业&#xff0c;实现让步进电机转起来相对容易很多&#xff0c;但是在应用中简单的转起来并无法满足实际应用的需求&…

运行时内存数据区之本地方法栈

Java虚拟机栈用于管理Java方法的调用&#xff0c;而本地方法栈用于管理本地方法的调用。本地方法栈&#xff0c;也是线程私有的。允许被实现成固定或者是可动态扩展的内存大小。&#xff08;在内存溢出方面是相同的)如果线程请求分配的栈容量超过本地方法栈允许的最大容量&…

域名、IP、DNS、Hosts、Nginx

先从最熟悉&#xff0c;也是最表层的域名和ip说起&#xff1a; 比如你和我&#xff0c;你叫张三&#xff0c;我叫李四&#xff0c;名字类似于域名。你在网吧玩&#xff0c;很多太多台电脑各自都有个座位号&#xff0c;座位号就类似于ip&#xff0c;我想去网吧找你去玩电脑&…

RK3568平台开发系列讲解(驱动基础篇)mmap系统调用详解

🚀返回专栏总目录 文章目录 一、什么是mmap二、mmap映射类型2.1、私有匿名映射2.2、私有文件映射2.3、共享文件映射2.4、共享匿名映射沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文将详细介绍mmap系统调用。 一、什么是mmap mmap/munmap函数是用户空间中常用的…

AttributeError: ‘LTP‘ object has no attribute ‘sent_split‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

PCB阻抗误差控制在5%,究竟有多难?

众所周知&#xff0c;阻抗控制是我们做高速设计最基本的原则。目前常规的板厂会把阻抗控制在10%的误差&#xff0c;不少朋友就会有疑问&#xff0c;为什么是10%&#xff1f;理论上误差肯定是越小越好&#xff0c;所以为什么不能进一步的把常规控制能力推到8%&#xff0c;甚至5%…

【Elastic (ELK) Stack 实战教程】10、ELK 架构升级-引入消息队列 Redis、Kafka

目录 一、ELK 架构面临的问题 1.1 耦合度过高 1.2 性能瓶颈 二、ELK 对接 Redis 实践 2.1 配置 Redis 2.1.1 安装 Redis 2.1.2 配置 Redis 2.1.3 启动 Redis 2.2 配置 Filebeat 2.3 配置 Logstash 2.4 数据消费 2.5 配置 kibana 三、消息队列基本概述 3.1 什么是…

DAP-seq技术鉴定全基因组水平上的ZjVND7靶基因,揭示酸枣全基因组复制在调节木质部导管分化和耐旱性中的作用

全基因组复制对生物体的影响是多方面的。全基因组加倍后&#xff0c;基因剂量效应、修饰的互作调控、快速遗传和表观遗传的修饰和变化&#xff0c;都会对基因组产生强烈影响&#xff0c;进而影响基因表达&#xff0c;最终导致形态、生理和适应性等性状方面的差异。在同源多倍化…