汉诺塔(C语言实现)
目录
汉诺塔的游戏规则:
当A只有一个环的时候:
当A只有两个环的时候:
当A只有三个环的时候:
思路:
当n=1时:
当n=2时:
当n=3时:
当n=4时:
见代码
运行截图
汉诺塔的游戏规则:
有三根金刚石柱子A、B、C,在A柱子上从下往上按照大小依次减小的顺序摞着64片黄金环。大梵天命令婆罗门把环从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在任何一个柱子上,小环上不能放大环,在三根柱子之间一次只能移动一个环。
即将A柱子上全部的环通过中间柱子B(B柱子作为中介)移动到C柱子上
当A只有一个环的时候:
A->C
当A只有两个环的时候:
A->B A->C B->C
当A只有三个环的时候:
A->C A->B C->B A->C B->A B->C A->C
思路:
1、将 n-1个环先放到B柱子上
2、将A柱子上的最后一个环移动到C柱子上
3、将n-1个环从B柱子移动到C柱子上
当n=1时:
1、将0个环先放到B柱子上
2、将A柱子上的最后一个环移动到C柱子上:A->C
3、将0个环从B柱子移动到C柱子上
当n=2时:
1、将1个环先放到B柱子上:A->B
2、将A柱子上的最后一个环移动到C柱子上:A->C
3、将1个环从B柱子移动到C柱子上:B->C
当n=3时:
1、将2个环先放到B柱子上:使用递归将2个环放到B上,因为A柱子的最后一个环是最大的因此可以先不理会,递归重复当n=2时的步骤,不过是从将2个环从A放到C上改为将2个环从A放到B上了
2、将A柱子上的最后一个环移动到C柱子上:A->C
3、将2个环从B柱子移动到C柱子上:使用递归将2个环从B柱子移动到C柱子上,此时C柱子上已经有了最大的一个环因此可以不用再理会了,递归重复当n=2的步骤,不过是从将2个环从A放到C上改为将2个环从B放到C上了
当n=4时:
1、将3个环先放到B柱子上:递归重复n=3的步骤,不过是从将3个环从A放到C上改为将3个环从A放到B上了
2、将A柱子上的最后一个环移动到C柱子上:A->C
3、将3个环从B柱子移动到C柱子上:递归重复当n=3的步骤,不过是从将3个环从A放到C上改为将3个环从B放到C上了
见代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void move(char X, char Y)
{printf("%c->%c ", X, Y);
}void HanoiTower(int n, char A, char B, char C)
{if (n == 1)//递归终止条件{move(A, C);return;}else{HanoiTower(n - 1, A, C, B);//将n-1个环从A柱子放到B柱子上,C柱子作为中介move(A, C);//将A柱子上的最后一个环移动到C柱子上HanoiTower(n - 1, B, A, C);//将n-1个环从B柱子放到C柱子上,A柱子作为中介}
}int main()
{printf("请确认A柱子上一共有多少个环:\n");int n = 0;scanf("%d", &n);HanoiTower(n, 'A','B','C');//将n个环从A柱子放到C柱子上,B柱子作为中介
}
运行截图
汉诺塔(C语言实现)相关推荐
- c语言程序代码应缩进几格,汉诺塔c语言程序代码
汉诺塔c语言程序代码(通过vc++6.0验证)(附讲解) 让我们先看看代码吧 #include int hj(int a,int b, int c,int i) { int t; if(i==1) p ...
- 汉诺塔c语言源程序步骤,汉诺塔问题的算法分析及C语言演示程序的实现
摘要:该文对经典的"汉诺塔"问题进行了详细的分析,并用C语言实现.通过问题的具体实现,使学习者了解问题的全过程,推广到一般. 关键词:汉诺塔;递归;C语言 中图分类号:TP301. ...
- 汉诺塔C语言递归实现
相信每一次学习C语言的同学都会遇到获诺塔问题,我学习C语言也已经有一段时间了,最近遇到了这个经典的问题,下面来总结一下!! 盘子个数n 步骤次数 1 1 2 3 3 7 4 15 ...... ... ...
- 汉诺塔c语言实现及分析
目录 起源 c语言实现 起源 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上 ...
- 汉诺塔c语言做法:汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题。它来自于印度神话。上帝创造世界时作了三根金刚石柱子,在第一根柱子上从下往上按大小顺序摞着64片黄金圆盘
汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题.借助c杆将所有的圆盘移到b杆上,每次只能移一个,且小的盘子一定在大的盘子上面 它来自于印度神话.上帝创造世界时作了三根金刚石柱子,在第一根柱子上 ...
- 递归 汉诺塔 C语言
# include <stdio.h>/* 递归:条件:1. 有正确(明确)的终止条件2. 该函数处理的数据规模必须递减3. 这个转化必须是可解的特点:易于理解速度慢存储空间大1.汉诺塔( ...
- 四柱子汉诺塔c语言程序代码,汉诺塔n=4(4个盘)c语言递归编程代码
满意答案 /**************************** 汉诺塔的算法就3个步骤: 第一,把a上的n-1个盘通过c移动到b. 第二,把a上的最下面的盘移到c.a成了空的. 第三,因为n-1 ...
- 汉诺塔c语言执行步骤详解,详解汉诺塔执行过程
问题补充: 能否从以下开始详细像上面那样说明一下程序的运行过程吗?本人主要不知道函数的运行过程. 返回B第一次调用 6,向下执行,执行完毕,返回A第一次调用 7,本次函数中p=a,q=b,r=c,m= ...
- C语言:汉诺塔(经典递归问题)
汉诺塔问题介绍 关于汉诺塔的传说: 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一 ...
- 汉诺塔怎么加计数次数c语言,C语言计算汉诺塔最小移动步数 (二)
前几天写的:C语言计算汉诺塔最小移动步数(一) 当时还不知道用2^n-1这个公式来求解汉诺塔移动步骤.=_= 偶然间在网上发现了这个公式,发现当时写的算法还是比较繁琐的.所以又根据这个公式又写了一个. ...
最新文章
- 贸易保护主义不能解决德国光伏企业的问题
- [转]搞ACM的你伤不起(转自Roba大神)
- python官网怎么改中文-pycharm如何设置成中文
- Ajax、jQuery基础入门视频教程
- PhpStorm 快捷键大全
- 【CVPR2020 image caption】读Meshed-Memory Transformer for Image Captioning
- Android M App休眠 (adb shell dumpsys usagestats)
- AOP联盟通知类型和Spring编写代理半自动
- Linux学习笔记-Makefile中的变量及函数
- 关于Python生成器的一个小问题(StopIteration)
- 公司采购流程管理制度 大小公司通用
- 关于永洪BI Kerberos机制的详细介绍
- c# NPOI按模板导出
- 不积跬步,无以至千里
- VBE6EXT.OLB不能被加载问题解决方法
- SIM900A GPRS GSM 基础知识
- solve函数c语言_c语言:回溯解数独程序
- 建行浙江分行总部【等。。。】
- 网络基础(六)-- 路由器的转发原理,路由表,静态路由及其配置
- M1 Mac上更好的 Golang 使用方案