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,C
	return 0;
}

7.结语

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大数据入门(一)

大数据主要要解决&#xff1a;海量数据的采集&#xff0c;存储&#xff0c;分析计算问题。 大数据的特点&#xff1a;大量&#xff08;数据量大&#xff09;&#xff0c;高速&#xff08;数据量的累积越来越快&#xff09;&#xff0c;多样&#xff08;结构化数据和非结构化数…

基于nodejs+vue医院综合管理系统实现与设计python-flask-django-php

第一&#xff0c;研究分析当下主流的nodejs技术&#xff0c;结合医院日常管理方式&#xff0c;进行医院综合管理系统的数据库设计&#xff0c;设计医院综合管理系统功能&#xff0c;并对每个模块进行说明。 第二&#xff0c;陈列说明该系统实现所采用的架构、系统搭建采用的服务…

【办公类-50-01】20240326判断随机写的“日期”是否是双休日

背景需求&#xff1a; 领导让我做设计本学期的科研培训方案。 我在2-6月随机写每月的培训日期&#xff0c;重新制定了主题 因为科研培训不可能在双休日&#xff0c;因此我希望本次活动的随机写的日期&#xff0c;不能是双休日。 我想用Python判断一下这些预设的日期是否是双休…

SpringBoot—@ConditionalOnBean与@ConditionalOnClass

一、ConditionalOnBean概念 需求场景 比如下面一种场景&#xff0c;我在实例化People对象的时候&#xff0c;需要注入一个City对象。这个时候问题来了&#xff0c;如果city没有实例化&#xff0c;那么下面就会报空指针或者直接报错。 所以这里需求很简单&#xff0c;就是当前c…

JS加密解密之应用如何保存到桌面书签

前言 事情起因是这样的&#xff0c;有个客户解密了一个js&#xff0c;然后又看不懂里边的一些逻辑&#xff0c;想知道它是如何自动拉起谷歌浏览器和如何保存应用到书签的&#xff0c;以及如何下载应用的。继而诞生了这篇文章&#xff0c;讲解一下他的基本原理。 渐进式Web应用…

电源模块 YULIN俞霖科技DC/DC电源模块 直流升压 高压稳压

Features 最低工作电压&#xff1a;0.7V电压隔离&#xff1a;1000VDC /3000VDC 平均无故障时间&#xff1a; > 800,000 小时短路与电弧保护无最低负载要求&#xff1a;可空载工作输入电压&#xff1a;5、12、15、24VDCOutput 100,200、300、400、500 、600、800、 1000、1…

kubernetes-k9s一个基于Linux 终端的集群管理工具

效果预览 下载 github 版本 此文档使用的版本是 v0.32.4&#xff0c;下载地址&#xff1a; https://github.com/derailed/k9s/releases/download/v0.32.4/k9s_linux_amd64.rpm 安装 rpm -ivh k9s_linux_amd64.rpm使用 启动 终端直接执行命令 k9s k9s基本操作 1 选择目…

魔众文库后台显示多少条,这个在那里文件修改?

显示多少条是那个文件修改的&#xff0c;显示1000条服务器比较差&#xff0c;加载太慢了。想要修改小一点。 这个是全局的显示配置&#xff0c;在文件 module/Wenku/Admin/Controller/WenkuDocController.php 中。 ->pageSizes([10, 100, 1000])

Redis中RDB的dirty机制和AOF中的后台重写机制

RDB的dirty计数器和lastsave属性 服务器除了维护saveparams数组之外&#xff0c;还维持着一个dirty计数器,以及一个lastsave属性: 1.dirty计数器记录距离上一次成功执行SAVE命令或者BGSAVE命令之后&#xff0c;服务器对数据库状态(服务器中的所有数据库)进行了多少次修改(包括…

[Android]模拟器登录Google Play失败

问题&#xff1a; 模拟器登录Google Play失败&#xff0c;提示couldnt sign in there was a problem communicating with google servers. try again later. 原因&#xff1a; 原因是模拟器没有连接到互联网&#xff0c;打开模拟器中Google浏览器进行搜索一样不行。 解决&am…

LED和数码管及按键

目录 LED LED灯亮的原理图 LED灯光闪烁 电路设计 keil文件 LED流水灯的实现 keil文件 数码管 显示的基本原理 LED数码管的显示方式 静态显示方式 动态显示方式 具体案例 数码管静态显示 电路图 keil文件 数码管动态显示 电路图 keil文件 74LS138译码器 译…

【Java程序设计】【C00367】基于(JavaWeb)Springboot的粮仓管理系统(有论文)

TOC 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;博客中有上百套程序可供参考&#xff0c;欢迎共同交流学习。 项目简介 项目获取 &#x1f345;文末点击卡片…

Pandoc下载和安装笔记

目录 一、下载 二、安装 1、安装软件 2、测试是否安装成功 Pandoc 的作者是 John MacFarlane&#xff0c;John MacFarlane是美国加州大学伯克利分校的哲学系的一位教授。编写Pandoc 用来生成讲义、课件和网站等。程序开源免费&#xff0c;目前以 GPL 协议托管在 Github 网站…

国内用户掌握ChatGPT,你已超越万人!

在数字时代&#xff0c;掌握前沿技术往往意味着拥有更多的机遇和可能。ChatGPT&#xff0c;作为当前最热门的人工智能技术之一&#xff0c;已经证明了其在各个领域的广泛应用价值。但在中国&#xff0c;能熟练使用ChatGPT的人究竟领先了多少人&#xff1f;让我们深入探讨。>…

hbuilderx打包苹果证书获取步骤

简介&#xff1a; 目前app开发&#xff0c;很多企业都用H5框架来开发&#xff0c;而uniapp又是这些h5框架里面最成熟的&#xff0c;因此hbuilderx就成为了开发者的首选。然而,打包APP是需要证书的&#xff0c;那么这个证书又是如何获得呢&#xff1f; 生成苹果证书相对复杂一些…

一本通差分约束入门题

最关键的就是找好所有的要满足的不等式条件&#xff0c;注意隐含的条件还有一点就是注意没有源点 建立源点 #2436. 「SCOI2011」糖果 #include<bits/stdc.h> using namespace std; using ll long long; using pii pair<int,int>; #define int long long const in…

随身wifi排行榜前三名大对比,格行vs华为vs中兴随身wifi谁是你心中的第一名?

第一名&#xff1a;格行随身wifi 品牌实力&#xff1a;随身wifi国内领跑品牌&#xff0c;深耕物联网15年&#xff0c;专注研发随身wifi&#xff0c;国内市场占有率较高&#xff0c;综合实力和口碑领先行业其他品牌。 产品优势&#xff1a;小巧便捷&#xff0c;彩屏显示&#…

SGE 如何影响 SEO?

虽然谷歌的 “Search Generative Experience”&#xff08;SGE&#xff09;并不保证一定会推出&#xff08;谷歌以其废弃项目的坟场而闻名&#xff09;&#xff0c;但 SEO 人员不能忽视它&#xff0c;因为它预计会对有机搜索产生负面影响&#xff1a; 可见性流量转化率收入 S…

Vue js封装接口

天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 1.安装axios npm install axios -g 2.在src下新建一个Api文件夹,再创建一个js文件 import axios from axios let configuration {url:"http://localhost:9090" } /*** 请求项目数据的请求体*/ async function h…

记录在项目中引用本地的npm包

1、先把需要的包下载下来&#xff0c;以Photo Sphere Viewer 为引用的npm包、项目以shpereRepo为例子 git clone https://github.com/mistic100/Photo-Sphere-Viewer2、拉下代码后修改之后执行 ./build.sh build.sh #!/usr/bin/env bashyarn run build targetDir"../sh…