汉诺塔问题【C语言实现】

2023-11-13

一、前言

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

二、动图演示

在这里插入图片描述

三、打印步骤

目的:
使用递归打印1个n层的汉诺塔从A柱到C柱的所有步骤
原理:
1.将n-1个盘子从A柱经C柱移动到B柱
2.将A柱上的第n个盘子移动到C柱
3.将n-1个盘子从B柱子经过A柱移动到C柱
代码实现:

#include<stdio.h>

void hanio(int n, char a, char b, char c)
{
	if (1 == n)
	{
		printf("%c-->%c\n", a, c);
	}
	else
	{
		hanio(n - 1, a, c, b);
		printf("%c-->%c\n", a, c);
		hanio(n - 1, b, a, c);
	}
}
int main()
{
	int n = 0;
	printf("input n: ");
	scanf("%d", &n);
	hanio(n, 'A', 'B', 'C');

	return 0;
}

四、打印步数

梵天说假如把64个金片从A柱移动到C,那么这个世界就毁灭了
只有一个盘子是

塔数 步数
1 1
2 3
3 7
4 15

由此可以看出规律,塔数为n,步数为2^n-1
代码实现:

#include<stdio.h>
#include<math.h>
int times(int n)
{
	return pow(2, n) - 1;
}
int main()
{
	int n = 0;
	printf("input n: ");
	scanf("%d", &n);
	int ret = times(n);
	printf("需要%d步完成:\n",ret);
	
	return 0;
}

不要忘记引头文件<math.h>
2^64-1 大约是1800亿步,这是个什么概念呢?
1年有365天,每天24小时,每小时是3600秒,如果1秒钟移动1次,如果把这64块金片全部移动完,大约需要5800亿年,宇宙形成到现在也才138亿年。

我们也可以把n层塔数所需要的步数和步骤同时打印出来
代码如下:

#include<stdio.h>
#include<math.h>
int times(int n)
{
	return pow(2, n) - 1;
}
void hanio(int n, char a, char b, char c)
{
	if (1 == n)
	{
		printf("%c-->%c\n", a, c);
	}
	else
	{
		hanio(n - 1, a, c, b);
		printf("%c-->%c\n", a, c);
		hanio(n - 1, b, a, c);
	}
}
int main()
{
	int n = 0;
	printf("input n: ");
	scanf("%d", &n);
	int ret = times(n);
	printf("需要%d步完成:\n",ret);
	hanio(n, 'A', 'B', 'C');

	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

汉诺塔问题【C语言实现】 的相关文章

  • 基于java的物资管理系统设计与实现

    基于java的物资管理系统设计与实现 I 引言 A 研究背景和动机 基于Java的物资管理系统设计与实现的研究背景和动机在于提高物资管理系统的效率和质量 使得物资管理系统更加便捷 快速 准确 从而提高物资管理的水平 该系统的设计和实现主要围
  • 用CHAT分析高校体育智慧教学体系构建与探索研究现状

    CHAT回复 现阶段 高校体育智慧教学体系的构建与探索研究还处于初级阶段 但全球数字化转型大潮的推动下 一些较为前沿的研究和实践已经开始出现 1 教学平台的建设 很多高校已经开始尝试使用在线教育平台进行体育教学 把传统的面对面授课模式转变为
  • 基于java的学生成绩在线管理系统设计与实现

    基于java的学生成绩在线管理系统设计与实现 I 引言 A 研究背景和动机 基于Java的学生成绩在线管理系统设计与实现的研究背景和动机是设计一个可以方便管理学生成绩的系统 该系统可以方便地记录学生的成绩 并为老师和学生提供查询和统计功能
  • 【计算机毕业设计】白优校园社团网站的设计与实现

    近些年 随着中国经济发展 人民的生活质量逐渐提高 对网络的依赖性越来越高 通过网络处理的事务越来越多 随着白优校园社团网站的常态化 如果依然采用传统的管理方式 将会为工作人员带来庞大的工作量 这将是一个巨大考验 需要投入大量人力开展对社团
  • 【gee】下载modis土地利用类型

    var china ee FeatureCollection projects assets china boundary var lc dataset ee ImageCollection MODIS 061 MCD12Q1 filter
  • Python自动化测试 | 如何使用Robot Framework进行自动化测试?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • js中关于字符串的创建和判断类型

    文章目录 创建方法 判断类型的技巧 区分 1 typeof 2 instanceof 共点 1 Object prototype toSt
  • 华为OD机试2024年最新题库(Java)

    我是一名软件开发培训机构老师 我的学生已经有上百人通过了华为OD机试 学生们每次考完试 会把题目拿出来一起交流分享 重要 2024年1月 5月 考的都是OD统一考试 C卷 题库已经整理好了 命中率95 以上 这个专栏使用 Java 解法 问
  • Python 文件的复制重命名以及xlsx文件中表格分开保存

    1 需要的头文件 import shutil import os import openpyxl 2 复制文件以及重命名 直接使用shutil库复制 重命名 移动即可 函数封装示例 source path 为全局变量被复制文件路径 dest
  • 计算机Java项目|基于SSM的篮球系列网上商城设计与实现

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 计算机Java项目|基于SpringBoot个人空间平台的设计与实现

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 2024史上最全Java面试八股文(带全部答案)

    今天要谈的主题是关于求职 求职是在每个技术人员的生涯中都要经历多次 对于我们大部分人而言 在进入自己心仪的公司之前少不了准备工作 有一份全面细致 面试题 将帮助我们减少许多麻烦 在跳槽季来临之前 特地做这个系列的文章 一方面帮助自己巩固下基
  • JCMsuite应用:光学环形谐振腔模拟

    本案程演示了环形谐振腔的模拟 这种类型的集成光子器件 例如用作升 降滤波器或在传感应用中 当物质或粒子附着在环上时 通过测量其共振频率的位移来检测 对于集成光子电路中的无源光器件 s矩阵通常是研究的热点 它描述了通过端口 波导进入设备的电磁
  • 详解toLowerCase(判断字符串相等)

    一 toLowerCase 函数简介 toLowerCase 是一个在多个编程语言中都存在的字符串方法 它的作用是将字符串中的所有大写字母转换为对应的小写字母 常用于文本处理 搜索和比较等情况 以确保字符串的一致性和非大小写敏感的操作 二
  • 用栈实现队列(OJ中报错的处理)

    用栈实现队列 ERROR AddressSanitizer myQueueFree函数中栈的释放处现了问题 没有调用StackDestory而是直接free了 这个是栈初始化时 capacity与malloc申请的空间大小没有匹配 请你仅使
  • 【心电图基线估计和去噪方法的群稀疏正则化】带有群稀疏正则化的心电图基线估计和去噪(Matlab实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 【Linux】文件周边001之系统文件IO

    樊梓慕 个人主页 个人专栏 C语言 数据结构 蓝桥杯试题 LeetCode刷题笔记 实训项目
  • 【路径规划】基于改进遗传算法求解机器人栅格地图路径规划(Matlab实现实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • sychnorized积累

    sychnorized 1 对象锁 包括方法锁 默认锁对象为this 当前实例对象 和同步代码块锁 自己指定锁对象 2 类锁 指synchronize修饰静态的方法或指定锁对象为Class对象 3 加锁和释放锁的原理 现象 时机 内置锁th
  • 计算机Java项目|人体健康信息管理系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板

随机推荐

  • Spring Bean如何保证并发安全

    1 可以设置Bean的作用域为原型 这样每次从容器中获取到的Bean就是一个新的实例 避免了多线程共享同一个对象实例的问题 2 不改变Bean作用域的情况下 可以避免在Bean中存可变状态的声明 尽量使用局部变量或使用线程安全的数据结构 3
  • Visual Station 2022的头文件包含目录设置的区别

    1 前言 对vs的包含头文件的组织 你困惑吗 困惑 有点困惑 BullS 在没喊出 BullSHI 之前 我先查了很多博客 结果 有的说 VC Directories gt Include Directories 适用于当前项目 C C g
  • BUUCTF [ACTF2020 新生赛]Exec

    1 刚打开的时候如图所示 先随便用一个地址127 0 0 1 2 然后查下目录127 0 0 1 ls ls看文件目录 发现flag 直接抓127 0 0 1 cat flag 拿到flag flag fdc896b1 e032 4e87
  • 如何训练自己的tokenizer

    训练自己的 tokenizer 通常需要以下几个步骤 准备数据 选择一些文本数据作为训练数据 并将其按照一定的方式拆分成若干个 token 例如将句子按照空格拆分成单词 选择模型 选择一种适合你的任务的模型 例如基于字符的模型或基于单词的模
  • electron 生成 arm64 的包

    vue electron https blog csdn net qq1195566313 article details 131713875 打包配置修改如下 electronBuilder build config appId com
  • 目标检测-YOLOv7代码及训练

    目录 论文及代码下载 代码结构 代码学习 1 train py 1 1 参数 1 2 Resume 训练中断后继续训练 1 3 Train 训练 2 yolov7 yaml 2 1 parameters and anchors 2 2 网络
  • 阿姆达尔定律

    原文地址 作者 Jakob Jenkov 译者 张坤 阿姆达尔定律可以用来计算处理器平行运算之后效率提升的能力 阿姆达尔定律因Gene Amdal 在1967年提出这个定律而得名 绝大多数使用并行或并发系统的开发者有一种并发或并行可能会带来
  • HDFS RBF的Connection管理

    文章目录 前言 Connection管理的权衡问题 RBF的Connection管理 细粒度的Connection Pool划分 Connection的创建 Connection的清理 参考资料 前言 为了解决HDFS Federation
  • Java-常量池

    Java 常量池 常量池是类文件中最复杂的数据结构 对于JVM字节码来说 如果操作数是很常用的数字 比如 0 这些操作数是内嵌到字节码中的 如果是字符串常量和较大的整数等 Class文件则会把这些操作数存储到常量池中 当使用这些操作数时 会
  • 快速傅氏变换之旅(二) 七种FFT算法速度比较(含代码)

    转载请标明是引用于 http blog csdn net chenyujing1234 例子代码 编译工具 VS2005 http www rayfile com zh cn files 76968e5e 7bde 11e1 8c13 00
  • 常见设计模式解析和实现(C++)Adapt模式

    作用 将一个类的接口转换成客户希望的另一个接口 Adapt模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 UML示意图 1 采用继承原有接口类的方式 2 采用组合原有接口类的方式 解析 Adapt模式其实就是把完成同样一个功能
  • 1.还不会部署高可用的kubernetes集群?看我手把手教你使用二进制部署v1.23.6的K8S集群实践(上)

    关注 WeiyiGeek 设为 特别关注 每天带你玩转网络安全运维 应用开发 物联网IOT学习 本章目录 0x00 前言简述 0x01 环境准备 主机规划 软件版本 网络规划 0x02 安装部署 1 基础主机环境准备配置 2 负载均衡管理工
  • 家用 NAS 服务器搭建

    1 前言 使用NAS 一般除了在家里通过局域网访问 还会有外网访问的需求 即在外面通过移动网络或者其他网络访问家中的NAS 正常情况下在外面是没有办法访问家庭网络的 甚至是nas 因为nas获取的是局域网IP 而不是广域网IP 全球唯一地址
  • Unable to Create Process

    Error Unable to create process OK Details gt gt 如果你的操作系统是Win7而你又直接点击运行按钮的话会提示此错误 错误的原因是你程序中有对注册表的处理或一些底层操作 所以会提示这个错误 解决办
  • 循环队列(Java实现)

    Java数据结构学习笔记2 循环队列 核心逻辑代码如下 class CircleQueue private int maxSize 0 private int front 指向队列的第一个元素 private int rear 指向队列的最
  • 多模态融合 2022

    论文题目 DeepFusion Lidar Camera Deep Fusion for Multi Modal 3D Object Detection 前融合 单位 google 注 4D Net和3D CVF也研究了lidar和相机两个
  • H2数据库--转载

    一 H2数据库介绍 常用的开源数据库有 H2 Derby HSQLDB MySQL PostgreSQL 其中H2和HSQLDB类似 十分适合作为嵌入式数据库使用 而其它的数据库大部分都需要安装独立的客户端和服务器端 H2的优势 1 h2采
  • 使用 ffmpeg 转换视频格式 mp4 webm

    ffmpeg 是 nix 系统下最流行的音视频处理库 功能强大 并且提供了丰富的终端命令 实是日常视频处理的一大利器 实例 flac 格式转 mp3 音频格式转换非常简单 Python span class wp keywordlink a
  • 【多方安全计算】差分隐私(Differential Privacy)解读

    多方安全计算 差分隐私 Differential Privacy 解读 文章目录 多方安全计算 差分隐私 Differential Privacy 解读 1 介绍 2 形式化 3 差分隐私的方法 3 1 最简单的方法 加噪音 3 2 加高斯
  • 汉诺塔问题【C语言实现】

    目录 一 前言 二 动图演示 三 打印步骤 四 打印步数 一 前言 汉诺塔 Tower of Hanoi 又称河内塔 是一个源于印度古老传说的益智玩具 大梵天创造世界的时候做了三根金刚石柱子 在一根柱子上从下往上按照大小顺序摞着64片黄金圆