C语言第一个实际问题--汉诺塔问题,初学者如何将实际问题表示为编程问题并求解,附代码

第一篇博客,的确有点标题党的嫌疑(额,亿点点),其实是笔者初学的经历和一些总结(本来想写这个的,结果忘了,就这样),话不多说进入正题。

1.汉诺塔介绍

 

汉诺塔问题源于一个印度传说......好了,这里就不加赘述了,反正能点进来的应该都知道(不是因为懒.狗头)

2.汉诺塔问题

三根棍子A,B,C,其中A上套有n个环,环从上至下依次增大,每次移动一个环,且只能大环在下,如何借助B将A上的环全部转移到C上。

3.解答

想必新手听到将这个问题写个代码做出来是这个表情

 

 这个是个啥问题?这也能转化为编程问题?这这这,那啥该怎么表示出来啊?.....

(1)将这个问题转化为抽象的那啥,这应该也是卡死大多数新手的第一道难关(我肯定是很轻易就想到了的)。首先,提炼出关键信息,(好像也没啥)碟子的数量n,三根棍子ABC,最后要得到步骤应该用"%c->%c\n"表示(%c就是ABC之一)

(2)分析问题,这个题目对新手来说还是有一定难度的(当然如果是对于笔者这种等级的大帅哥那就不算问题了),空想肯定是想不出来的,动手实践必须的。自己做一次3层(应该都会吧,不会建议看看智慧树)

 分析易得,把最下面一个碟子从A转移到C,即图中第四步,就是最特殊的一步,在这之前步骤就是为了将上面的碟子转移到B上,后面的步骤就是为了将B上的碟子转移到C上。你想到了啥

 ,没错, 就是你刚学的递归!!!(被大帅哥猜中了吧)

总结:第一步:将n-1个碟子从A借助C转移到B上

                                                        第二步:将A上最大的碟子转移到C上

                                                        第三步:将B上的n-1个碟子转移到C上

代码:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值