2 sbjshmily sbjshmily 于 2014.07.01 21:43 提问

c++输出时,是需要用栈吗?

【问题描述】
一个国王因为听信谗言将一个无辜的数学家关进了监狱。虽然事后发现确属冤枉,但碍于面子,国王不肯认错。为了挽回,于是国王决定用Bytish锁链将其锁在墙上。这种锁链由n(10≤n≤1000)个固定在墙上的铁环和铁棒组成。由于环不是都套在棒上,要想把整副锁链取下是十分困难的。数学家必须自己通过不断取下和套上铁环最终将所有铁环都取下才能获得自由。取下或套上铁环的规则是:
 铁环从1、2、……、n依次编号。
 一次只能把一个环取下或套上。
 编号为1的环无论何时都能取下或套上。
 如果编号为1、……、k-1(1≤k≤n)的环已经从棒上取下,并且k环套在棒上,则可以取下或套上编号为k+1的环。
写一个程序,读入锁链描述并计算从棒上取下所有环所需的最少步数。
【基本要求】
显然,可以运用递归的方法解决此问题。但是你能否找到一个非递归算法呢?
【输入输出】
输入:环的总数n。
输出:为尽量体现程序输出结果的层次,可以按照从n、n-1、n-2、……、1的顺序,将移除掉n号环的全部过程作为一个段落输出,然后将移除n-1号环的全部过程也作为一个段落输出,其余依此类推。
【实现提示】
显然,通过枚举前i个环的解锁过程可以从中找出解题的思路。
当n=1时,直接移除即得解。
当n=2时,显然不能先移出1环,再移除2环。因为根据约束条件,必须1环在棒上才能移除2环。因此移除的步骤应该是先2环,再1环。
当n=3时,移除3环的条件是2环在,1环卸,于是可以先移除1环,然后移除3环,然后套上1环,然后移除2环和1环。
当n≥4的情形请自行推导。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!