7-24 纸牌排序 (10 分)
小诺诺喜欢玩纸牌比大小的游戏。现在有一副牌中的若干张纸牌,需要按牌面的数字从大到小的顺序排列,若数字大小相同则按花色从大到小(黑桃>红桃>梅花>方块)排列。牌面为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
【PTA] 7-8 纸牌排序 (10 分) c语言实现_雨中纸鸢943的博客-CSDN博客
空格处理费了老大的劲,参考上面的博
AC
#include<bits/stdc++.h>
using namespace std;
int t;
struct node {
int f;
int num;
};
string str[4]= {"diamond","club","heart","spade"};
bool cmp(node a,node b) {
if(a.num==b.num)
return a.f>b.f;
return a.num>b.num;
}
int main() {
scanf("%d",&t);
// char s[100];
string s;
int x;
getchar();
while(t--) {
node a[100];
int t=0;
while(1) {
char ch;
while(1) { //消除空格
scanf("%c",&ch);
if(ch==' ') scanf("%c",&ch);
if(ch=='\n') break;
if(ch!=' '&&ch!='\n') break;//这里多读入了一个字母
}
if(ch=='\n') break;
// scanf("%s %d",s,&x);
cin>>s>>x;
//这里比较的时候,应该都去除一个字母
// if(!strcmp(s,"iamond")) a[t].f=+1;
// if(!strcmp(s,"lub")) a[t].f=+1;
// if(!strcmp(s,"eart")) a[t].f=+1;
// if(!strcmp(s,"pade")) a[t].f=+1;
if(s=="iamond") a[t].f=0;
else if(s=="lub") a[t].f=1;
else if(s=="eart") a[t].f=2;
else if(s=="pade") a[t].f=3;
a[t++].num=x;
}
sort(a,a+t,cmp);
for(int i=0; i<t; i++) {
if(i) cout<<" ";
cout<<str[a[i].f]<<" "<<a[i].num;
}
cout<<endl;
}
return 0;
}