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

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

1.首先解释一下,汉诺塔问题:古代梵塔内有A、B、C3个座,开始时A座上面有64个盘子,盘子大小不等,大的在下,小的在上。一个老和尚想把64个盘子从A移到C,规定移动过程中3个座上面始终保持大的在下,小的在上,且每次只能移动一个盘子。编程实现输出移动盘子的过程。

2.解题思路

(1)命令第2个和尚将上面63个盘子从A移到B;

(2)自己把最底下,最大的那个盘子从A移到C;

(3)再让第2个和尚把63个盘子从B移到C;

只需3步即完成,这中间蕴涵的就是递归思想。但是还有一个问题,怎么才能完成步骤(1)和(3)呢?看下面的3个步骤:

 <1> 命令第3个和尚将上面62个盘子从A移到C;

 <2> 自己把最底下,最大的那个盘子从A移到B;

 <3> 再让第3个和尚把62个盘子从C移到B;

这就完成了步骤(1),步骤(3)的思路可类推。

C语言代码如下

#include<stdio.h>
int main()
{
	void hanoi(int n,char one ,char two ,char three );
	int n;
	scanf("%d",&n);
	hanoi(n ,'A' ,'B' ,'C' );
	return 0 ;
}

//将n个盘子借助two,从one移到three 
void hanoi(int n,char one ,char two ,char three ) //定义汉诺塔函数 
{
	void move (char one ,char two );
	if (n == 1)
		move(one,three);
	else {
		hanoi(n-1,one ,three ,two);
		move(one,three);
		hanoi(n-1,two ,one ,three );
	}
}
void move (char x ,char y ) //定义move函数,打印移动的过程 
{
	printf("%c -> %c\n",x ,y );
}

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唯一的阿金

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值