poj 的一道改编题,说是翻译题更恰当,因为只是小幅度改动。
一道模拟题,代码掌控能力比较好,思维逻辑清晰的话就能AC。
代码如下:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node
{
char c[5];
int rk;
char da[5];
int num;
}s[4][15];
bool cmp(node a,node b)
{
if(a.rk==b.rk) return a.num<b.num;
return a.rk>b.rk;
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
char s1[150],s2[60],s3[2];
while(~scanf("%s",s3))
{
scanf("%s%s",s1,s2);
strcat(s1,s2);
for(int i=0,j=0,cnt1=0;i<104;i+=2)
{
s[j][cnt1].c[0]=s1[i+1];
if(s1[i+1]=='C') s[j][cnt1].rk=4;
else if(s1[i+1]=='D') s[j][cnt1].rk=3;
else if(s1[i+1]=='S') s[j][cnt1].rk=2;
else if(s1[i+1]=='H') s[j][cnt1].rk=1;
s[j][cnt1].da[0]=s1[i];
if(s1[i]>='2'&&s1[i]<='9') s[j][cnt1].num=s1[i]-'0';
else if(s1[i]=='A') s[j][cnt1].num=14;
else if(s1[i]=='T') s[j][cnt1].num=10;
else if(s1[i]=='J') s[j][cnt1].num=11;
else if(s1[i]=='Q') s[j][cnt1].num=12;
else if(s1[i]=='K') s[j][cnt1].num=13;
j++;
if(j%4==0)
cnt1++;
j%=4;
}
for(int i=0;i<4;i++)
sort(s[i],s[i]+13,cmp);
int mark,i,sum;
if(s3[0]=='S') mark=3;
else if(s3[0]=='W') mark=2;
else if(s3[0]=='N') mark=1;
else mark=0;
for(sum=1;sum<5;sum++)
{
if(sum==1) printf("East player:\n");
else if(sum==2) printf("South player:\n");
else if(sum==3) printf("West player:\n");
else printf("North player:\n");
printf("+---++---++---++---++---++---++---++---++---++---++---++---++---+\n");
for(int k=0;k<13;k++)
printf("|%s %s|",s[mark][k].da,s[mark][k].da);printf("\n");
for(int k=0;k<13;k++)
printf("| %s |",s[mark][k].c);printf("\n");
for(int k=0;k<13;k++)
printf("|%s %s|",s[mark][k].da,s[mark][k].da);printf("\n");
printf("+---++---++---++---++---++---++---++---++---++---++---++---++---+\n");
mark++;
mark%=4;
}
printf("\n");
}
return 0;
}