C语言 汉诺塔问题

目录

1.前言

2.问题描述

3.问题分析

4.定义一个主函数

5.再定义一个hanoi函数

6.所有代码

7.结语


1.前言

汉诺塔问题,是心理学实验研究常用的任务之一。该问题的主要材料包括三根高度相同的柱子和一些大小及颜色不同的圆盘,三根柱子分别为起始柱A、辅助柱B及目标柱C。

2.问题描述

这里需要解决的是,将A柱子中的所有圆盘通过辅助柱B全部转移到C柱子上,并且圆盘的颜色顺序不变。

由于颜色容易搞混,所以我们这里假设A柱子中的圆盘大小不同,从上往下依次递减,也就是说,在移动的过程中,小的盘子在上面,大的盘子在下面,不能改变顺序。

3.问题分析

要使得A柱子上的最底部的一个盘子放在C柱子上,不管A柱子上有多少盘子,必须得把A柱子上除了最底部的盘子外的其他所有盘子都先转移到B柱子上,然后,再把最后一个盘子放入C柱子的最底部,接着,把B柱子中的盘子通过A柱子按大小顺序依次放入C柱子中。

4.定义一个主函数

int main()
{
    int n = 0;
    scanf("%d", &n);
    //输入n可以自定义盘子的多少
    hanoi(n,'A', 'B', 'C');
    //向hanoi函数中传入A,B,C三个字符,用于辅助盘子的交换,记住,一定是传三个字符,要不然传的时候不显示A,B,C
    return 0;
}

5.再定义一个hanoi函数

这个函数要实现这样一个功能,先把除了A柱子最底部的一个盘子外所有盘子通过柱子C全部转移到柱子B上,再把最后A底部的最后一个盘子转移到柱子C上,接着,再通过柱子A将B中的所有盘子转移到柱子C上。

在这里分为两种情况:

一、当最开始时A柱子上只有1个盘子时,将A柱子上的盘子直接转移到C上

二、当最开始时A柱子上盘子的数量大于等于2时,先将A中的除了最后一个外的所有盘子都通过C转移给B(在这里过程不重要,所以不要考虑过程,只考虑结果就行了),再将B中的除了最后一个外的所有盘子都通过A转移给C

void hanoi(int n, char A, char B, char C)
{
    if (n == 1)
    {
        printf("%c -> %c\n", A, C);
        //当最开始时A柱子上只有一个盘子时,将A柱子上的盘子直接转移到C上
    }
    else
    {
        hanoi(n - 1, A, C, B);
        //将A中的除了最后一个外的所有盘子都通过C转移给B(在这里过程不重要,所以不要考虑过程,只考虑结果就行了)
        printf("%c -> %c\n", A, C);
        hanoi(n - 1, B, A, C);
        //将B中的除了最后一个外的所有盘子都通过A转移给C(这里也不考虑过程)

    }
}

6.所有代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>void hanoi(int n, char A, char B, char C)
{if (n == 1){printf("%c -> %c\n", A, C);//当最开始时A柱子上只有一个盘子时,将A柱子上的盘子直接转移到C上}else{hanoi(n - 1, A, C, B);//将A中的除了最后一个外的所有盘子都通过C转移给B(在这里过程不重要,所以不要考虑过程,只考虑结果就行了)printf("%c -> %c\n", A, C);hanoi(n - 1, B, A, C);//将B中的除了最后一个外的所有盘子都通过A转移给C}
}int main()
{int n = 0;scanf("%d", &n);//输入n可以自定义盘子的多少hanoi(n,'A', 'B', 'C');//向hanoi函数中传入A,B,C三个字符,用于辅助盘子的交换,记住,一定是传三个字符,要不然传的时候不显示A,B,Creturn 0;
}

7.结语

今天的经验分享就到这里,有喜欢的朋友可以点赞➕评论➕收藏➕关注,如果有不懂的地方可以咨询博主,谢谢大家支持博主!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

制作小程序需要多少钱?成本分析与效益预测

在当今数字化时代&#xff0c;微信小程序已成为企业和个人拓展业务的重要工具。然而&#xff0c;许多人在考虑进入这一领域时&#xff0c;都会面临一个关键问题&#xff1a;制作一个小程序需要多少钱&#xff1f;下面和你一起探讨小程序开发的成本因素&#xff0c;帮助你更好地…

HCIP的学习(4)

GRE和MGRE VPN---虚拟专用网络。指依靠ISP&#xff08;运营商&#xff09;或其他公有网络基础设施上构建的专用的安全数据通信网络。该网络是属于逻辑上的。​ 核心机制—隧道机制&#xff08;封装技术&#xff09; GRE—通用路由封装 ​ 三层隧道技术&#xff0c;并且是属于…

WebPack的使用及属性配、打包资源

WebPack(静态模块打包工具)(webpack默认只识别js和json内容) WebPack的作用 把静态模块内容压缩、整合、转译等&#xff08;前端工程化&#xff09; 1️⃣把less/sass转成css代码 2️⃣把ES6降级成ES5 3️⃣支持多种模块文件类型&#xff0c;多种模块标准语法 export、export…

获客助手怎么实现抖音巨量广告回传?

在数字化营销的世界里&#xff0c;数据就像是宝藏&#xff0c;不断被挖掘、分析并应用。而抖音巨量广告回传&#xff0c;就是那把开启宝藏之门的钥匙。通过专门的工具将目标数据进行反馈&#xff0c;巨量系统接收数据后进行优化&#xff0c;广告模型构建速度加快&#xff0c;推…

AXI_Lite协议详解

文章目录 摘要一、AXI_Lite接口全局信号&#xff1a;1、写地址通道&#xff1a;2、写数据通道&#xff1a;3、写响应通道&#xff1a;4、读地址通道&#xff1a;5、读数据通道&#xff1a; 二、仿真波形 摘要 AXI4-lite是AXI4-full的简化版。用于简单、低吞吐量的内存映射通信…

Java异常知识点详解

目录 1. 异常的概念与体系结构 1.1 异常的概念 1. 算术异常 2. 数组越界异常 3. 空指针异常 1.2 异常的体系结构 1.3 异常的分类 2. 异常的处理 2.1 防御式编程 2.2 异常的抛出 2.3 异常声明throws 2.4 try-catch捕获并处理 2.5 finally 2.4 异常的处理流程 3. 自…

深度剖析python的就业面

技术行业&#xff0c;一定要提升技术功底&#xff0c;丰富项目实战经验&#xff1b; 这对于你未来几年职业规划&#xff0c;以及测试技术掌握的深度非常有帮助。 WEB开发 尽管目前Python并不是做Web开发的首选&#xff0c;但这仍是一个比较热门的方向。 现如今有不少知名网…

【win10 win11添加右键】git bash

打开注册表编辑器。 按下Win键 R&#xff0c;然后输入”regedit”并按下回车键来打开注册表编辑器。计算机\HKEY_CLASSES_ROOT\Directory\Background\shell\git_bash\command2. 导航到注册表路径&#xff1a;依次展开”HKEY_CLASSES_ROOT\Directory\Background\shell”。右键…

使用EasyYapi插件简化导出yapi接口

安装 &#xff1a; 关键配置&#xff1a; 其中的token在这里拿&#xff1a; 使用&#xff1a; 导出当前Controller下的所有api&#xff1a;使用下图命令可仅导出指定的api: 附&#xff1a;配置部分参考了idea&#xff1a;使用easyYapi插件导出yapi接口

利用sin/cos原理驱动步进电机

利用sin/cos原理控制步进电机转动 前言什么是步进电机驱动器细分控制电机内部结构图片步进电机驱动原理&#xff08;重要&#xff09;步进电机参数&#xff11;、步距角&#xff1a;收到一个脉冲转动的角度&#xff12;、细分数 &#xff1a;&#xff11;&#xff0f;&#xf…

基于CLIP模型的图像相似度计算与检索

使用CLIP模型的对图像进行相似度计算。 1、CLIP中的图像相似度 使用CLIP计算两个图像之间的相似度是一个简单的过程&#xff0c;只需要两个步骤&#xff1a;首先提取两个图像的特征&#xff0c;然后计算它们的余弦相似度。 首先&#xff0c;确保已安装所需的软件包。建议设置…

echarts 柱形图多个legend值 同一个柱形图分不同颜色展示

多个legend值 同一个柱形图分不同颜色展示 效果图&#xff1a; 如何实现&#xff1a; 原理&#xff1a;主要通过 series-bar 里面的 stack 数据堆叠来实现 series: [{name: Income,type: bar,stack: Total, //设置堆叠label: {show: true,position: top},data: [900, 345, 3…