Time Limit: | 1000MS | Memory Limit: | 65536KB |
Total Submissions: | 149 | Accepted: | 66 |
纸牌的数字表示是 A、2、3、4、5、6、7、8、9、10、J、Q、K。
纸牌的花色表示是 黑桃:s,红桃:h,方块:d、梅花:c 。
没有大、小王。
结合表示,如:
黑桃A:As
红桃2:2h
方块3:3d
梅花4:4c
(一张牌的两个或三个的数字或字母之间没有空格隔开)
排序规则是:
先按数字排序:A、2、3、4、5…
如果数字相同按花色排序:s、h、d、c 。
比如:3s、Ah、2d、As、2c这5张牌
其排序结果是:As、Ah、2d、2c、3s。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#define N 100001
struct d{
int num;
int color;
int str;
}data[N];
int n;
char str[N][4];
void _Bubble()
{
int t1, t2,t3;
for (int i = 1; i <= n;i++)
for (int j = n; j > i; j--){
if (data[j].num < data[j - 1].num){
t1 = data[j].num;
t2 = data[j].color;
t3 = data[j].str;
data[j].num = data[j - 1].num;
data[j].color = data[j - 1].color;
data[j].str = data[j - 1].str;
data[j - 1].num = t1;
data[j - 1].color = t2;
data[j - 1].str = t3;
}
else
if (data[j].num == data[j - 1].num)
if (data[j].color < data[j - 1].color){
t1 = data[j].num;
t2 = data[j].color;
t3 = data[j].str;
data[j].num = data[j - 1].num;
data[j].color = data[j - 1].color;
data[j].str = data[j - 1].str;
data[j - 1].num = t1;
data[j - 1].color = t2;
data[j - 1].str = t3;
}
}
}
int main(void)
{
std::cin >> n;
for (int i = 1; i <= n; i++){
std::cin>>str[i];
data[i].str = i;
if (strlen(str[i]) > 2)data[i].num = 10;
else
switch (str[i][0]){
case 'J':
data[i].num = 11;
break;
case 'Q':
data[i].num = 12;
break;
case 'K':
data[i].num = 13;
break;
case 'A':
data[i].num = 1;
break;
default:
data[i].num =(int) (str[i][0] - '1' + 1);
break;
}
switch (str[i][strlen(str[i])-1]){
case 's':
data[i].color = 1;
break;
case 'h':
data[i].color = 2;
break;
case 'd':
data[i].color = 3;
break;
case 'c':
data[i].color = 4;
break;
}
}
_Bubble();
for (int i = 1; i <= n; i++)
printf("%s\n", str[data[i].str]);
return 0;
}