【C语言】汉诺塔问题

article/2025/3/10 23:20:34

汉诺塔是一个非常经典的问题,其背后是一个传说故事:
在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。
抽象为数学问题就是:
有三根相邻的柱子,标号为a,b,c,a柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子c上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请问至少需要多少次移动,设移动次数为H(n)。
在这里插入图片描述

那么如何用C语言编程解决这个问题呢?
不难想到,通过递归来实现代码,将这个复杂的问题转化为简单的问题,其思想是先将a柱上的n-1个盘子借助c柱移到b柱上,然后把a柱上第n个盘子移到c柱上,最后将b柱上的n-1个盘子借助a柱移到c柱上。

#include <stdio.h>void move(char x, char y)//把盘子从x柱移到y柱
{static int i = 0;//记录移动的次数i++;printf("第%d次把盘子从%c柱移到%c柱\n", i, x, y);
}void Hanoi(int n, char A, char B, char C)//把n个盘子从A柱借助B柱移到C柱
{if (n == 1)//递归限制条件(达到该条件则不再递归):A柱上最后一个盘子从A柱移动到C柱{move(A, C);}else if(n > 1){Hanoi(n - 1, A, C, B);//把A柱上n-1个盘子借助C柱移到B柱move(A, C);//A柱上n-1个盘子移到B上之后将A柱上第n个盘子移到C柱Hanoi(n - 1, B, A, C);//将B柱上n-1个盘子借助A柱移到C柱}
}int main()
{int n = 0;printf("input n:\n");scanf("%d", &n);char x = 'a';char y = 'b';char z = 'c';Hanoi(n, x, y, z);return 0;
}

以3个盘子为例,来看看解决方案:
在这里插入图片描述
在这里插入图片描述
这就是汉诺塔问题的C语言实现,希望各位能够点个赞~


http://chatgpt.dhexx.cn/article/3a1w1x09.shtml

相关文章

汉诺塔C语言步骤解析

汉诺塔问题在C语言中一般采用递归法来写&#xff0c;假设有A、B、C三根棒&#xff0c;A棒放着若干个圆盘&#xff0c;将其移动到C棒上&#xff0c;中途可在B棒中暂时放置圆盘。 分析&#xff1a; (1) 如果只有一个圆盘&#xff0c;则把该圆盘从A棒移动到C棒 (2) 如果圆盘数量…

汉诺塔递归的c语言实现(递归)

对于递归来讲, 汉诺塔实际是经典到不能再经典的例子了, 每个数据结构的教材对会提到. 但是到最后只给出一段类似下面的一段代码: #include<stdio.h>void move(int n,char a,char b,char c) {if(n1)printf("\t%c->%c\n",a,c); //当n只有1个的时候直接从…

C语言编程实现汉诺塔问题

C语言编程实现汉诺塔问题 1.首先解释一下&#xff0c;汉诺塔问题&#xff1a;古代梵塔内有A、B、C3个座&#xff0c;开始时A座上面有64个盘子&#xff0c;盘子大小不等&#xff0c;大的在下&#xff0c;小的在上。一个老和尚想把64个盘子从A移到C&#xff0c;规定移动过程中3个…

汉诺塔C语言实现(纯代码)

a、b、c三座塔&#xff0c;将n个从小到大&#xff08;自上而下&#xff09;的圆盘从a移动到c&#xff0c;移动期间小圆盘必须在大圆盘上面&#xff0c;问移动步骤。 #include<stdio.h>int main() {void hanoi(int n,char one,char two,char three);int m;printf("…

【汉诺塔】C语言递归解法,深层次地带你理解汉诺塔公式

目录 汉诺塔公式 汉诺塔问题在数学层面的公式&#xff1a; C语言递归公式 两层汉诺塔 三层汉诺塔 递归问题可谓是学习C语言以来的第一个拦路虎&#xff0c;而汉诺塔问题更是递归中对新手很不友好的一道经典题&#xff0c;我们接下来从公式角度和更深层的图解角度来让你理解…

汉诺塔c语言代码实现

汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重…

【C语言】汉诺塔超详解(脑把脑解释)

文章目录 一、前言二、准备工作关于递归函数 三、汉诺塔步数计算详解&#xff1a;函数的设计符合递归函数的两个基本条件&#xff1a; 四、汉诺塔步骤打印&#xff08;绝对详细&#xff0c;仔细看就能看懂 &#xff09;铺垫换个思路&#xff1a;柱子竟然是可以移动的&#xff0…

汉诺塔C语言实现

汉诺塔背景 文章目录 汉诺塔背景前言一、什么是汉诺塔&#xff1f;二、汉诺塔问题的背景三、汉诺塔问题的代码实现1.代码原理2.代码实现 前言 汉诺塔问题&#xff0c;是心理学实验研究常用的任务之一。该问题的主要材料包括三根高度相同的柱子和一些大小及颜色不同的圆盘&…

C语言汉诺塔详解

问题概述&#xff1a;在A柱子上从下往上按照大小顺序摞着N片黄金圆盘。要求把圆盘从下面开始按大小顺序重新摆放在另一根(B or C)柱子上。并且规定&#xff0c;在小圆盘上不能放大圆盘&#xff0c;在三根柱子之间一次只能移动一个圆盘。 如图所示&#xff1a; (ps&#xff1a;…

C语言实现汉诺塔详细步骤(递归与非递归)及代码

前言 C语言汉诺塔问题是一个经典的问题&#xff0c;在学习编程的初学者中非常流行。它涉及到了递归的思想&#xff0c;能够帮助我们理解递归的基本原理。 首先&#xff0c;我们来了解一下汉诺塔的问题。汉诺塔问题是指&#xff1a;有三根柱子A,B,C&#xff0c;A柱子上有n个盘…

汉诺塔(C语言)

文章目录 一、什么是汉诺塔问题&#xff1f; 二、实现步骤 三、代码实现 四、代码分析 一、什么是汉诺塔问题&#xff1f; 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金…

图文详解汉诺塔(附C语言实现代码)

关注、星标公众号&#xff0c;直达精彩内容 来源&#xff1a;http://a.nxw.so/1iDyQD 一、前言 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根…

C语言 - 汉诺塔详解(超详细)

文章目录 一、前言二、玩游戏三、汉诺塔打印步数四、汉诺塔打印步骤 一、前言 一、汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下…

汉诺塔问题以及青蛙跳台阶问题(附C语言代码)

汉诺塔问题&#xff1a; 汉诺塔问题的源于印度一个古老传说的益智玩具。大焚天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照先大后小的顺序摞着64片圆盘。大焚天命令婆罗门把圆盘从下面按大小顺序重新摆放在另一根柱子上&#xff0c;并且规定在小盘…

Mac上显示实时网速小工具

1.iStat Menus 6 功能较丰富&#xff0c;比如你想看大冬天电脑温度等&#xff0c;毕竟Mac本出现过无法充电和无法开机的情况&#xff0c;明明是90多的点&#xff08;自己MBP2018出现过&#xff09; 下载地址&#xff1a;https://bjango.com/mac/istatmenus/ 激活&#xff1a…

在mac上显示网速的软件——iStat Menus 5:

在mac上显示网速的软件——iStat Menus 5: https://bjango.com/mac/istatmenus/ 注册码: Email: 982092332qq.com SN: GAWAE-FCWQ3-P8NYB-C7GF7-NEDRT-Q5DTB-MFZG6-6NEQC-CRMUD-8MZ2K-66SRB-SU8EW-EDLZ9-TGH3S-8SGA 「注册码源于:http://www.pc6.com/mac/111587.html」 转载于…

断点续传

断点续传的实现思路 1、每次一进来&#xff0c;先给总大小和已经下载的大小赋值&#xff0c;判断若不是从头下载&#xff0c;则显示进度条2、暂停的时候&#xff0c;取消请求&#xff0c;并用 NSUserDefaults记录下载的暂停位置&#xff08;客户端记录&#xff09;3、继续下载的…

iStat Menus 无法正常读取传感器温度的解决办法

文章目录 问题解决方式如果是App Store版本&#xff0c;安装插件如果是突然读取不到&#xff0c;尝试重置传感器过滤器重置Mac的SMC使用新版软件 问题 换了电脑之后&#xff0c;像往常一样安装了各种惯用软件。最后发现iStat Menus 没办法读取硬件温度&#xff0c;只能读取到一…

Mac上实时网速、内存等显示

对我这种有强迫症的&#xff0c;要监控各种参数&#xff0c;比如实时网速显示&#xff0c;这里给大家推荐 iStat Menus 1、官网下载 https://bjango.com/mac/istatmenus/ 2、注册码&#xff08;仅供学习研究&#xff0c;误作商业用途&#xff09; xxxx-xxxx-xxxx-xxxx-xxxx…

Mac过热降频的罪魁祸首,竟是插到了左边的Type-C口

晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 自从MacBook Pro换成最新设计后&#xff0c;用户的吐槽就没停过&#xff0c;最大的槽点就是那4个Type-C插口。 虽然你今后离不开转接器了&#xff0c;但苹果说4个Type-C更方便&#xff0c;因为可以随便插&#xff0c;每个都可以给…