小诺诺喜欢玩纸牌比大小的游戏。现在有一副牌中的若干张纸牌,需要按牌面的数字从大到小的顺序排列,若数字大小相同则按花色从大到小(黑桃>红桃>梅花>方块)排列。牌面为A、J、Q、K分别用1、11、12、13表示;花色中的黑桃、红桃、梅花、方块分别用英文单词"spade"、"heart"、"club"、"diamond"表示。
输入格式:
测试数据有多组,首先输入测试的组数T (0<T<10),然后是T组测试数据;每组测试输入一行,按“花色 数字”的格式输入若干张牌,花色可能为"spade"、"heart"、"club"、"diamond"之一,数字为1~13。输入的数据之间可能有若干(至少1个)空格,在行的首尾也可能有若干空格,但每组输入数据的总长度不会超过1000个字符。
输出格式:
每组测试输出一行,按描述中的排序规则从大到小输出牌的信息,数据之间都以一个空格分隔。
输入样例:
2
diamond 1 club 1 heart 1 spade 3 diamond 2 club 3 heart 2
diamond 13 club 13 heart 13 spade 12
输出样例:
spade 3 club 3 heart 2 diamond 2 heart 1 club 1 diamond 1
heart 13 club 13 diamond 13 spade 12
以下为代码
#include<stdio.h>
#include<stdlib.h>
typedef struct {
char r[10];
int x;
int f;
}Card;
Card card[100];
char ap[100];
int main(){
int l=0;
int T;
scanf("%d",&T);
getchar();
while(T--){
char e='a';
l=0;
while(e!='\n'){
scanf("%s%d",&card[l].r,&card[l].x);
l++;
e=getchar();
}
for(int n=0;n<l;n++){
if(card[n].r[0]=='h')
card[n].f =3;
if(card[n].r[0]=='s')
card[n].f =4;
if(card[n].r[2]=='u')
card[n].f =2;
if(card[n].r[1]=='i')
card[n].f =1;
}
Card t;
for(int i=0;i<l;i++)
for(int j=0;j<l-1-i;j++)
{
if(card[j].x<card[j+1].x){
t=card[j];
card[j]=card[j+1];
card[j+1]=t;
}
if(card[j].x==card[j+1].x)
if(card[j].f<card[j+1].f){
t=card[j];
card[j]=card[j+1];
card[j+1]=t;
}
}
for(int i=0;i<l;i++)
printf("%s %d ",card[i].r,card[i].x );
printf("\n");
}
}