编程点将台(40)

软件世界

  编程点将台:一个编程爱好者学习、动手、交流的天地。注重培养编程思想,强调多种解法。

  参与方式:

  在每期的请战帖向各路编程好手发出邀请,来信请寄 liz@cpcw.com(请在来信中写明通讯地址和联系方式,不限开发工具和语言),为照顾拿到报纸较晚的读者,我们会在隔一周后再公布结果。

  奖励方式:

  将来信中的优秀读者大名公布在点将录中,上榜的读者的成果还将放在网上供大家学习交流,另外还将获得50元现金奖励。

  请战帖

  由于工作流程的原因,本期不出题,下期恢复出题。

  点将录

  第37期文臣殿题目回顾:车厢出轨:火车有9节车厢,编号为1~9,在铁轨的左边以369247185的次序进入(如图),在中间的K1~K3三条铁轨对车厢次序进行调整,然后在右边以123456789的次序出轨。而调整的规则是每节车厢都可以进入K1~K3这三条铁轨再出轨,这三条铁轨则遵循LIFO(后入先出)的规则,请谈一下调整车厢出轨的思路和算法。

  这道题目的解法其实比较多,在读者的来信中,也提供了较为多样的思路。阿志在这里给大家整理了一种思路,虽然他们在效率上并不是最好的,但总的来讲这两种思路比较容易想到,要实现也相对比较容易。

  这种思路应该是一种比较主流的解法吧。对铁轨左边还未出轨的每节车厢依次执行如下三步操作,就可在右边得到所需的出轨车厢序列。

  (1)检查入轨前车厢是否刚好是所需的出轨车厢,若是,则不进入三条缓冲铁轨调整,直接出轨。

  (2)检查各栈顶元素(即为三条缓冲铁轨最顶端的车厢编号)是否是所需车厢,若是,则出轨。

  (3)若车厢编号不满足前两条,则选最佳缓冲铁轨入轨。最佳缓冲铁轨遵循两条原则:一是缓冲铁轨为空。二是如果不为空,则将车厢放入这样的铁轨:即进入后次序符合出轨的要求,同时与原栈顶元素差值最小。

  本期获奖读者:李娜 方如坤

  以上获奖读者获得现金50元奖励,相关作品及更多读者来信请在http://www.cpcw.com/40/rec.rar下载。