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.rhkb.cn/news/286725.html

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

相关文章

TextMeshPro图文混排的两种实现方式,不打图集

TMP图文混排 方案一&#xff1a;TMP自带图文混排使用方法打包图集使用 方案二&#xff1a;不打图集&#xff0c;可以使用任何图片 接到一个需求&#xff0c;TextMeshPro 图文混排。 方案一&#xff1a;TMP自带图文混排 优点布局适应优秀&#xff0c;字体左中右布局位置都很不错…

Elasticsearch8 - Docker安装Elasticsearch8.12.2

前言 最近在学习 ES&#xff0c;所以需要在服务器上装一个单节点的 ES 服务器环境&#xff1a;centos 7.9 安装 下载镜像 目前最新版本是 8.12.2 docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.2创建配置 新增配置文件 elasticsearch.yml http.host…

费曼学习法:快速掌握新知识!

首先&#xff0c;讲一个关于学习法则的小故事。 马克思普朗克在1918年荣获诺贝尔物理学奖之后&#xff0c;他就在全德国作巡回报告。 不管被邀请到哪里&#xff0c;他就会对新的量子力学演讲一番。 因此&#xff0c;慢慢他的司机也对他的报告烂熟于心&#xff0c;于是就告诉他。…

Java中 List 集合,通过 Stream 流进行排序总结

一、数据准备 public class OrderTest {private String channelCode;private BigDecimal rate;// 省略 getter、setter、toString()、constructor }List<OrderTest> orderTestList new ArrayList<>();OrderTest z09 new OrderTest("Z09", new BigDeci…

是德科技KEYSIGHT E4990A阻抗分析仪

181/2461/8938产品概述: E4990A 阻抗分析仪具有 20 Hz 至 120 MHz 的频率范围&#xff0c;可在宽阻抗范围内提供出色的 0.045%&#xff08;典型值&#xff09;基本准确度&#xff0c;并内置 40 V 直流偏置源&#xff0c;适用于元器件、半导体和材料测量。 无论研发、生产、质…

SpringMvc执行流程源码解析

一、简介 Spring web Mvc是基于ServletApi构建的原始Web模块&#xff0c;从一开始就包含在Spring框架中&#xff1b; 从Servlet到SpringMvc 最典型的MVc就是JSPServletjavaBean的模式&#xff1b; 弊端&#xff1a; 1、xml下配置Servlet的映射非常麻烦&#xff0c;效率低&…

【 yolo红外微小无人机-直升机-飞机-飞鸟目标检测】

yolo无人机-直升机-飞机-飞鸟目标检测 1. 小型旋翼无人机目标检测2. yolo红外微小无人机-直升机-飞机-飞鸟目标检测3. yolo细分类型飞机-鸟类-无人机检测4. yolo红外大尺度无人机检测5. 小型固定翼无人机检测6. 大型固定翼无人机检测7. yolo航空俯视场景下机场飞机检测 1. 小型…

git clone拉取项目时报错xxx bytes of body are still expected

报错如下&#xff1a; 尝试了网友们的各种方法&#xff1a; 1、可能缓存区溢出&#xff0c;执行以下语句&#xff0c;将缓存设置为500M或者更大 git config http.postBuffer 524288000 2、可能项目过大&#xff0c;先进行浅克隆&#xff0c;然后更新远程库到本地 git clone…

鸿蒙APP应用开发教程—超详细的项目结构说明

1. 新建项目 打开DevEco Studio, 选择 Create Project: 1.1 选择模版 Create Project - Choose Template 1.2 配置项目 Create Project - Configure Project 如果使用的是 DevEco 3.X 版本, 可以根据 Compile SDK版本选择不同的模式, 比如: 3.0.0(API 8)及更早 - 仅支持 …

Python学习:循环语句

Python循环语句 概念 循环语句是编程中常用的结构&#xff0c;用于多次执行相同或类似的代码块。Python中有两种主要的循环语句&#xff1a;for循环和while循环。 for循环&#xff1a; for循环用于遍历一个序列&#xff08;如列表、元组、字符串等&#xff09;中的元素&#x…

VUE之首次加载项目缓慢

最近公司有个大型的项目&#xff0c;使用vue2开发的&#xff0c;但是最终开发完成之后&#xff0c;项目发布到线上&#xff0c;首次加载项目特别缓慢&#xff0c;有时候至少三十秒才能加载完成&#xff0c;加载太慢了&#xff0c;太影响用户体验了&#xff0c;最近研究了一下优…

“一树生三花”战略背后,梦之蓝·手工班的新使命

执笔 | 尼 奥 编辑 | 扬 灵 绵柔酒香&#xff0c;洋河酒韵。3月17日&#xff0c;由洋河股份主办的中国白酒发展趋势高峰论坛暨梦之蓝手工班战略升级发布会在成都隆重举办&#xff0c;协会领导、行业专家、名商大商齐聚一堂&#xff0c;梦之蓝手工班三款产品首次集体亮相&…

【第十二届“泰迪杯”数据挖掘挑战赛】【2024泰迪杯】B题基于多模态特征融合的图像文本检索—解题全流程(持续更新)

2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛B题 解题全流程&#xff08;持续更新&#xff09; -----基于多模态特征融合的图像文本检索 一、写在前面&#xff1a; ​ 本题的全部资料打包为“全家桶”&#xff0c; “全家桶”包含&#xff1a;模型数据、全套代码、训练好的模…

NVIDIA NIM 提供优化的推理微服务以大规模部署 AI 模型

NVIDIA NIM 提供优化的推理微服务以大规模部署 AI 模型 生成式人工智能的采用率显着上升。 在 2022 年 OpenAI ChatGPT 推出的推动下&#xff0c;这项新技术在几个月内就积累了超过 1 亿用户&#xff0c;并推动了几乎所有行业的开发活动激增。 到 2023 年&#xff0c;开发人员…

QT 界面2.1

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {this->setWindowIcon(QIcon(":/Logo/1bc87d9b4c1ea878d5e0845257a06f7f (1).jpg")); // 图标this->setWindowTitle(&…

mysql日志管理 、备份与恢复

目录 一 MySQL 日志 &#xff08;一&#xff09;&#xff0c;日志位置 &#xff08;二&#xff09;配置文件中 与日志相关的代码 1&#xff0c;错误日志 2&#xff0c;通用查询日志 3&#xff0c;二进制日志(binlog) 4&#xff0c;中继日志 5&#xff0c;慢查询日志…

「薪酬设计」某维修服务公司维修技术人员薪酬体系设计项目纪实

——搭建合理薪酬制度&#xff0c;有效激励维修技术人员 本次薪酬体系设计项目持续的时间比较长&#xff0c;前后大约持续了半年时间&#xff0c;华恒智信团队对公司的多个模块都给予了分析&#xff0c;提供了建议方案&#xff0c;专家比较细心&#xff0c;服务很全面&#xf…

测试的思路总结

背景 这两天有一个之前做的需求出了问题。业务整体是一个流程类的业务&#xff0c;先通过一个多阶段的弹窗页面&#xff0c;从ABCDE等多个条件中选取三个生成一个任务&#xff0c;然后后台去跑任务&#xff0c;生成数据。具体需求是根据弹窗中的条件中&#xff0c;修改A、B、C…

C语言例4-14:从键盘输入小写字母转换成大写字母并输出。

代码如下&#xff1a; //从键盘输入小写字母转换成大写字母并输出。 #include<stdio.h> int main(void) {char c1,c2;printf("输入小写字母&#xff1a; \n");c1 getchar(); //从键盘输入一个字符putchar(c1);printf(",%d\n",c1);c2 c1-32; …

AI研报:从Sora看多模态大模型发展

《从Sora看多模态大模型发展》的研报来自浙商证券&#xff0c;写于2024年2月。 这篇报告主要探讨了多模态大模型的发展趋势&#xff0c;特别是OpenAI发布的视频生成模型Sora&#xff0c;以及其对行业发展的影响。以下是报告的核心内容概述&#xff1a; Sora模型的发布&#x…