第21519题 程序题
C++ 基于指定队列算法实现扑克牌升序排序

题目描述

现有36张扑克牌,编号规则为A1~A9、B1~B9、C1~C9、D1~D9,其中A代表方片、B代表草花、C代表红桃、D代表黑桃。排序规则如下:

  1. 两张卡牌X1Y1与X2Y2(X为A~D表示花色,Y为1~9表示点数),若花色不同则按升序A < B < C < D排序(即优先级D>C>B>A,升序时A在前);
  2. 若花色相同,则比较点数大小,点数小的排在前面。

排序算法要求

必须使用题目指定的队列排序策略实现,步骤如下:

  1. 第一轮排序(按点数处理)
    • 建立9个队列(对应点数1~9),将所有卡牌按点数存入对应队列;
    • 按队列1到队列9的顺序依次出队,得到中间序列。
  2. 第二轮排序(按花色处理)
    • 建立4个队列(对应花色A~D),将第一轮得到的中间序列按花色存入对应队列;
    • 按队列A到队列D的顺序依次出队,得到最终升序结果。

输入输出要求

  • 时间限制:1000ms
  • 内存限制:65536KB

输入

输入共两行: 第一行是整数n,表示卡牌总数(1 ≤ n ≤ 100); 第二行是n个XY格式的字符串,每个字符串代表一张牌,X为A~D,Y为1~9。

输出

输出共三部分:

  1. 第一轮9个队列的状态,共9行,格式为QueueX: 牌1 牌2 ...,空队列输出QueueX:
  2. 第二轮4个队列的状态,共4行,格式为QueueX: 牌1 牌2 ...,空队列输出QueueX:
  3. 最终升序排序后的卡牌序列,空格分隔。

样例输入

8
D8 A6 C3 B8 C5 A1 B5 D3

样例输出

Queue1:A1
Queue2:
Queue3:C3 D3
Queue4:
Queue5:C5 B5
Queue6:A6
Queue7:
Queue8:D8 B8
Queue9:
QueueA:A1 A6
QueueB:B5 B8
QueueC:C3 C5
QueueD:D3 D8
A1 A6 B5 B8 C3 C5 D3 D8

提示

第二次入队出队时,可以复用第一轮9个队列中的前4个,仅需开辟9个队列即可完成排序。

编辑模式
程序运行统计
暂无判题统计