当前位置:首页 » 《资源分享》 » 正文

古有老和尚搬金圆盘,今有程序员写代码。_SpongeBob_shouse的博客

12 人参与  2021年10月08日 14:23  分类 : 《资源分享》  评论

点击全文阅读


//汉诺塔的规则

大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘

下面进行图片演示//第一次移动,要把A柱子上的前n-1个移动到B柱子上;(图1)
//第二次移动,直接把A柱子上的最后一个移动到C柱子上;(图2)
//第三次移动,把B柱子上的n - 1个柱子通过柱子A移动到柱子C上。图三

 


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//首先说明一点 我们写的递归一定要讲究 相似之处 并且所有的事件都会归一 会为你想完成的那件事情服务 这就是递归 并且递归一定要有一个靠近的点
//第一次移动,要把A柱子上的前n-1个移动到B柱子上;(图1)
//第二次移动,直接把A柱子上的最后一个移动到C柱子上;(图2)
//第三次移动,把B柱子上的n - 1个柱子通过柱子A移动到柱子C上。
//不管你要移动多少 总会有这个步骤进行 操作 所以我们可以依照这个操作 并且
//所以写的步骤都不会冲突的
void hanoi(int n,char a,char b,char c)
{
	if (n == 1)
	{
		printf("%c->%c", a, c);//这个位置出现 是为了说明当只有一个的时候 我们的移动操作过程 直接移动 
	}
	//以下三个代码就是我们实现的思路方法 
	else
	{
		hanoi(n - 1, a, c, b);//A柱子上的前n-1个移动到B柱子上  
		printf("%c->%c", a, c);//直接把A柱子上的最后一个移动到C柱子上 这个是唯一一个进行打印的步骤 也就是说 真正进行打印的步骤  注意我们的a c不是刚刚的 a  c了需要注意一下才行
		hanoi(n - 1, b, a, c);//这个代表将把B柱子上的n - 1个柱子通过柱子A移动到柱子C上
	}

}

int main()
{
	int n = 0;
	scanf("%d", &n);//这里确定是写几个盘子 进行
	hanoi(n, 'A', 'B', 'C');
}


点击全文阅读


本文链接:http://zhangshiyu.com/post/29555.html

柱子  递归  圆盘  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1