#include <stdio.h>
#include <string.h>
#include <math.h>
void print (double n)
{
int i = (n) ;
double t = n-i;
double eps = 1e-5;
if (fabs(t-0.4)<=eps) printf ("spade");
if (fabs(t-0.3)<=eps) printf ("heart");
if (fabs(t-0.2)<=eps) printf ("club");
if (fabs(t-0.1)<=eps) printf ("diamond");
printf (" %d",i);
}
int main ()
{
int t;
scanf ("%d",&t);
getchar();
char se[100];
int di;
while (t--) //t组数据
{
int i = 0 ;
double sum [150]= {0.0};
while (1)//读入的一组数据
{
char flag;
while (1)
{
scanf ("%c",&flag);
if (flag==' ') scanf ("%c",&flag);
if (flag=='\n') break;
if (flag != ' ' && flag != '\n') break;
}
if (flag=='\n') break;
scanf ("%s %d",se,&di);
if(!(strcmp(se,"pade"))) sum[i++] = di + 0.4;//设置区分度
if(!(strcmp(se,"eart"))) sum[i++] = di + 0.3;
if(!(strcmp(se,"lub"))) sum[i++] = di + 0.2;
if(!(strcmp(se,"iamond"))) sum[i++] = di + 0.1;
}
int j,t;
double temp;
for (j=1;j<i;j++)
for (t=i-1;t>=j;t--)//大到小
{
if (sum[t]>sum[t-1])
{
temp = sum [t];
sum[t] = sum[t-1];
sum[t-1] = temp;
}
}
for (j=0;j<i;j++)
{
if (j) printf (" ");
print (sum[j]);
}
printf ("\n");
}
return 0;
}
这题的思路就是根据比重不同进行排序,很显然 相同点数的时候 ,牌色会影响次序,所以相对来说,牌色不是那么重要,因此把不同的的牌色赋予一个小数值,从而比较浮点数的大小即可。
有几个注意的点,一个是题目中彼此牌之间空格的数量是不确定的,二是double类型数的精确度是个范围 因此只能限制在一个小范围中
然后本题后面用的排序法为选择排序法。
11/27