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; }