学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!
附上汇总贴:小猴编程C++ | 汇总-CSDN博客
【题目描述】
小猴有
n
n
n卡牌,编号依次是
1
∼
n
1\sim n
1∼n。除了花色为“王”的卡牌没有点数之外,其他的卡牌都有一种花色和一个点数,花色为
J
O
K
E
R
JOKER
JOKER(王) 、
s
p
a
d
e
spade
spade(黑桃) 、
h
e
a
r
t
heart
heart(红桃) 、
d
i
a
m
o
n
d
diamond
diamond(方块) 、
c
l
u
b
club
club(梅花) 之一, 点数为
1
∼
13
1\sim 13
1∼13之一。
游戏规定,不同花色的牌具有的优先级
- J O K E R JOKER JOKER为第一优先级;
- s p a d e spade spade为第二优先级;
- c l u b club club和 d i a m o n d diamond diamond为第三优先级;
-
h
e
a
r
t
heart
heart为第四优先级。
现在小猴要把所有卡牌进行排序,排序的规则为: - 对于不同优先级的卡牌,优先级越高(越小)则在卡牌中的位置越靠前;
- 对于同一优先级的卡牌,点数越小则在卡牌中的位置越靠前;
- 对于同一优先级且同一点数的卡牌,编号越小则在卡牌中的位置越靠前。
请你帮助小猴完成所有卡牌的排序。
【输入】
第一行,包含一个整数 n n n,表示卡牌的张数;
接下来 n n n行,其中第 i i i行用来描述编号为 i i i的卡牌,每行包含一个字符串 c c c,表示卡牌花色。如果 c c c不为 J O K E R JOKER JOKER, 则还会有一个正整数 x x x表示点数。
保证所有的字符串 c c c一定是 J O K E R 、 s p a d e 、 h e a r t 、 d i a m o n d 、 c l u b JOKER、spade、heart、diamond、club JOKER、spade、heart、diamond、club之一。
【输出】
n n n行,每行包含一个整数和一个字符串,第 i i i行的整数和字符串表示排序之后第 i i i张牌的编号和花色。
【输入样例】
5
club 9
JOKER
diamond 6
spade 1
heart 12
【输出样例】
2 JOKER
4 spade
3 diamond
1 club
5 heart
【代码详解】
#include <bits/stdc++.h>
using namespace std;
struct Card {
string c;
int num, id, g;
}a[100005];
int n;
bool cmp(Card x, Card y)
{
if (x.g!=y.g) return x.g<y.g; // 优先级越高(越小)越靠前
if (x.num!=y.num) return x.num<y.num; // 点数越小越靠前
return x.id<y.id; // 编号越小越靠前
}
int main()
{
cin >> n; // 输入n
for (int i=1; i<=n; i++) { // 遍历n张卡牌
cin >> a[i].c; // 输入花色
a[i].id = i; // 给编号赋值
if (a[i].c!="JOKER") cin >> a[i].num; // 不是JOKER的话,还需要记录点数
if (a[i].c=="JOKER") a[i].g=1; // 定义优先级
else if (a[i].c=="spade") a[i].g = 2;
else if (a[i].c=="club" || a[i].c=="diamond") a[i].g=3;
else a[i].g = 4;
}
sort(a+1, a+n+1, cmp); // 按照题目要求进行组合排序
for (int i=1; i<=n; i++) { // 输出结果
cout << a[i].id << " " << a[i].c << endl;
}
return 0;
}
【运行结果】
5
club 9
JOKER
diamond 6
spade 1
heart 12
2 JOKER
4 spade
3 diamond
1 club
5 heart
标签:周赛,diamond,heart,club,卡牌,C++,JOKER,spade
From: https://blog.csdn.net/guolianggsta/article/details/136517750