【问题描述】
一个国王原因是听信谗言将一个无辜的数学家关进了监狱。虽然事后发现确属冤枉,但碍于面子,国王不肯认错。为了挽回,于是国王决定用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号环的全部过程也作为一个段落输出,其余依此类推。
一个国王原因是听信谗言将一个无辜的数学家关进了监狱。虽然事后发现确属冤枉,但碍于面子,国王不肯认错。为了挽回,于是国王决定用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号环的全部过程也作为一个段落输出,其余依此类推。
解决方案
88