题目链接:http://poj.org/problem?id=1786
题意:第一个输入为庄家,庄家顺时针依次分牌(分的第一个不是自己),然后每个人手中的牌按照规定的顺序排列,然后从 South player 开始顺时针按照格式从小到大输出各人手中的牌。(特别注意输出的格式)
源代码:
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
struct N
{
char x,y;
}a[4][13];
bool cmp(struct N d,struct N e)
{
if(d.x==e.x) //相等的情况较复杂
{
if(d.y>='2'&&d.y<='9'&&e.y>='2'&&e.y<='9') return d.y>e.y;
else if(d.y=='T'&&e.y>='2'&&e.y<='9') return true;
else if(d.y=='J'&&(e.y=='T'||(e.y>='2'&&e.y<='9'))) return true;
else if(d.y=='Q'&&((e.y>='2'&&e.y<='9')||e.y=='T'||e.y=='J')) return true;
else if(d.y=='A') return true;
else if(d.y=='K'&&((e.y>='2'&&e.y<='9')||e.y=='T'||e.y=='J'||e.y=='Q')) return true;
return false;
}
if(d.x=='H') return true;
else if(d.x=='S')
{
if(e.x<'S'&&e.x!='H') return true;
return false;
}
else if(d.x=='D')
{
if(e.x<'D') return true;
return false;
}
else return false;
}
int main()
{
int i,j,k;
char st;
int num1;
cin>>st;
while(st!='#')
{
if(st=='N') num1=3;
else if(st=='E') num1=0;
else if(st=='S') num1=1;
else num1=2;
for(i=0;i<13;i++)
for(j=0;j<4;j++)
cin>>a[(j+num1)%4][i].x>>a[(j+num1)%4][i].y;
for(i=0;i<4;i++)
sort(a[i],a[i]+13,cmp);//排序
for(i=0;i<4;i++)
{
if(i==0) cout<<"South ";
else if(i==1) cout<<"West ";
else if(i==2) cout<<"North ";
else cout<<"East ";
cout<<"player:"<<endl;
for(k=0;k<13;k++)
cout<<"+---";
cout<<"+"<<endl;
for(j=12;j>=0;j--)
{
cout<<"|"<<a[i][j].y<<" "<<a[i][j].y;
}
cout<<"|"<<endl;
for(j=12;j>=0;j--)
cout<<"| "<<a[i][j].x<<" ";
cout<<"|"<<endl;
for(j=12;j>=0;j--)
{
cout<<"|"<<a[i][j].y<<" "<<a[i][j].y;
}
cout<<"|"<<endl;
for(k=0;k<13;k++)
cout<<"+---";
cout<<"+"<<endl;
}
cin>>st;
if(st!='#') cout<<endl;
}
return 0;
}