回 帖 发 新 帖 刷新版面

主题:第45次编程比赛第2题

第45次编程比赛第2题
一个比较经典的问题了,但也不是一点难度都没有。
我稍微做了一点改动,让大家练练手吧。
一个PI(圆周率的那个字母)型的管道,如下面所示。
----------------------------------------------
A                                            B        
--------+     +-----------+     +-------------
        |     |           |     |
        |     |           |     |
        |     |           |     |
        |  C  |           |  D  |
        +-----+           +-----+
一队小球从A口进,从B口出。C和D为管道侧面的两个封闭的管道。
管道内径有限,不允许两个小球并排通过。即不允许两个小球随便交换位置。
C和D都能放下足够多的小球,但因为内径有限,每次都只能移动最上面的一个。
每一个小球的每一次移动称为一次操作。且小球只许从左向右移动,即以下操作是合法的:
A->C,A->D,A->B,C->D,C->B,D->B。
以下操作是非法的:
D->C,D->A,C->A。
小球最多26个(字母数)。
从A口进入时,小球进入的顺序是(即小球从右到左的顺序是)abcdefghi...(字母顺序,一个字母代表一个小球)
要求从B口出来时,小球的顺序是(即小球从右到左的顺序是)字符串s。(s为输入值。例如,s为badecfhig...)
求实现所需的最少操作数。如果不能实现,则返回"NO!"。
请编写一包含main的完整程序,先输入小球的数量n,再输入小球从B口出来时的顺序:由小写字母组成的字符串s。
输出实现所需的最少操作数m,如果不能实现,则返回"NO!"。

例如:
输入3,cba时,实际的操作为
进入时的顺序为abc
a  从 A 到 C
b  从 A 到 C
c  从 A 到 B
b  从 C 到 B
a  从 C 到 B
所以,应输出5.

再例如:
输入5,eadbc时,实际的操作为
进入时的顺序为abcde
a  从 A 到 D
b  从 A 到 C
c  从 A 到 C
d  从 A 到 C
e  从 A 到 B
a  从 D 到 B
d  从 C 到 B
c  从 C 到 D
b  从 C 到 B
c  从 D 到 B
所以,应输出10.

测试环境为VC6或VC2002
截止时间:下个星期一(10月23日)中午12点半

有任何问题,请发帖讨论,或直接通过论坛发短消息给我~~

祝大家好运~~

回复列表 (共2个回复)

沙发

text

板凳

看下是什么

我来回复

您尚未登录,请登录后再回复。点此登录或注册