C++ 基于指定队列算法实现扑克牌升序排序
题目描述
现有36张扑克牌,编号规则为A1~A9、B1~B9、C1~C9、D1~D9,其中A代表方片、B代表草花、C代表红桃、D代表黑桃。排序规则如下:
- 两张卡牌X1Y1与X2Y2(X为A~D表示花色,Y为1~9表示点数),若花色不同则按升序A < B < C < D排序(即优先级D>C>B>A,升序时A在前);
- 若花色相同,则比较点数大小,点数小的排在前面。
排序算法要求
必须使用题目指定的队列排序策略实现,步骤如下:
- 第一轮排序(按点数处理):
- 建立9个队列(对应点数1~9),将所有卡牌按点数存入对应队列;
- 按队列1到队列9的顺序依次出队,得到中间序列。
- 第二轮排序(按花色处理):
- 建立4个队列(对应花色A~D),将第一轮得到的中间序列按花色存入对应队列;
- 按队列A到队列D的顺序依次出队,得到最终升序结果。
输入输出要求
- 时间限制:1000ms
- 内存限制:65536KB
输入
输入共两行: 第一行是整数n,表示卡牌总数(1 ≤ n ≤ 100); 第二行是n个XY格式的字符串,每个字符串代表一张牌,X为A~D,Y为1~9。
输出
输出共三部分:
- 第一轮9个队列的状态,共9行,格式为
QueueX: 牌1 牌2 ...,空队列输出QueueX:; - 第二轮4个队列的状态,共4行,格式为
QueueX: 牌1 牌2 ...,空队列输出QueueX:; - 最终升序排序后的卡牌序列,空格分隔。
样例输入
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个队列即可完成排序。
本题为编程题,提交代码并运行通过测试点后判分。
正在加载题目数据…
子题
该题型需在试卷/作业中作答,单题练习暂不支持
答案解析