#P2200. A Card Trick
A Card Trick
题目描述
以下是一个由魔术师和她的助手进行的纸牌魔术。助手让一位观众从一副 52 张牌(梅花、方块、红心、黑桃的 A、2、3、4、5、6、7、8、9、10、J、Q、K)中选择 5 张牌。助手将其中一张牌返回给观众,然后将剩下的牌一张一张地交给魔术师。在进行一些神秘的操作后,魔术师能够识别出观众手中的(第五张)牌。
魔术师按照以下方式确定这张牌:
- 牌在牌堆中的顺序首先由牌值决定,对于牌值相同的牌再由花色决定(顺序如上述给出)。所以牌的完整顺序是:。
- 记住第一张牌的花色和牌值。
- 在剩下的三张牌中找到最小的牌(按照上述顺序)的位置(位置为 1、2 或 3),将这个位置值加到第一张牌的牌值上。
- 如果最后三张牌中较大的两张牌顺序不对,就在步骤 2 的结果上加 3。
- 缺失的牌与第一张牌花色相同,牌值为步骤 3 计算得到的值(如果需要则循环计算)。
例如: 输入牌为 。 最后三张牌中最小的牌是 ,位置为 3。 和 顺序不对,所以在 的牌值上加上 。循环计算后,缺失的牌是 。
这个问题是编写一个程序来实现助手的功能。
输入
输入的第一行是一个正整数 ,表示后面数据集的数量。接下来的 行,每行是一个数据集。每个数据集是由 5 张牌组成的序列,牌之间用空格分隔。每张牌由一个或两个字符表示牌值,一个字符表示花色,如第一段所述。
输出
对于每个数据集,在单独的行上输出 5 张输入牌的一种排序,格式如示例输出所示。序列中的第一张牌是返回给观众的牌。剩下的牌是交给魔术师的牌(按照交给魔术师的顺序)。对于一些问题可能有多个解(但不是说一定有)。在这种情况下,输出最小的解,按照上述给出的牌的顺序来确定顺序。对于下面的第一个示例, 也是一个解,但 。
2
4D 5H 10C 10D QH
7H 5C KS 6C 8D
Problem 1: 5H QH 10D 10C 4D
Problem 2: 6C 5C 7H 8D KS
来源
太平洋西北地区 2004 年