题意:牌局由四个人构成,围成一圈。我们称四个方向为北 东 南 西。对应的英文是North,East,South,West。游戏一共由一副扑克,也就是52张构成。开始,我们指定一位发牌员(东南西北中的一个,用英文首字母标识)开始发牌,发牌顺序为顺时针,发牌员第一个不发自己,而是发他的下一个人(顺时针的下一个人)。这样,每个人都会拿到13张牌。 牌的顺序,首先,花色是(梅花)<(方片)<(黑桃)<(红桃),(输入时,我们用C,D,S,H分别表示梅花,方片,黑桃,红桃,即其单词首字母)。对于牌面的值,我们规定2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < T < J < Q < K < A。
要求:从小到大排序每个人手中的牌,并按照给定格式输出。
思路:首先,对输入的字符串进行处理,循环发放的情况下,利用对4取模得到下标,获得牌的信息,创建两个结构体,一个表示牌的信息,花色和数值,并按照规定对<进行重载,另一个表示甲乙丙丁的信息,牌数,然后对每个人的牌进行sort排序。
总结:该题就主要考察了sort排序,对字符串信息的获取。
代码:
#include<iostream>
#include<algorithm>
using namespace std;
struct pai
{
char hs;
char num;
bool operator<(const pai& a)
{
if(hs!=a.hs)
{
if(hs=='C')
return true;
if(hs=='D')
{
if(a.hs=='S'||a.hs=='H') return true;
return false;
}
if(hs=='S')
{
if(a.hs=='H') return true;
return false;
}
if(hs=='H') return false;
}
if(num>='2'&&num<='9')
{
if(a.num>'9') return true;
return num<a.num;
}
if(num=='T')
{
if(a.num<='9') return false;
return true;
}
if(num=='J')
{
if(a.num=='T'||a.num<='9') return false;
return true;
}
if(num=='Q')
{
if(a.num=='K'||a.num=='A') return true;
return false;
}
if(num=='K')
{
if(a.num=='A') return true;
return false;
}
if(num=='A') return false;
}
}pa[200];
struct person
{
pai p[20];
}per[4];
int main()
{ // freopen("in.txt","r",stdin);
char n;cin>>n;
while(n!='#')
{
char str[200];cin>>str>>str+52;
int x1=0,x2=0,x3=0,x4=0;
for(int i=0,k=0;i<104;i=i+2,k++)
{ if(k%4==0)
{
per[k%4].p[x1].hs=str[i];
per[k%4].p[x1++].num=str[i+1];
}
if(k%4==1)
{
per[k%4].p[x2].hs=str[i];
per[k%4].p[x2++].num=str[i+1];
}
if(k%4==2)
{
per[k%4].p[x3].hs=str[i];
per[k%4].p[x3++].num=str[i+1];
}
if(k%4==3)
{
per[k%4].p[x4].hs=str[i];
per[k%4].p[x4++].num=str[i+1];
}
}
for(int i=0;i<4;i++) sort(per[0].p,per[0].p+13);
int flag;
if(n=='N') flag=1;
if(n=='E') flag=0;
if(n=='S') flag=3;
if(n=='W') flag=2;
for(int k=0;k<4;k++)
{
if(k==0) cout<<"South player:"<<endl;
if(k==1) cout<<"West player:"<<endl;
if(k==2) cout<<"North player:"<<endl;
if(k==3) cout<<"East player:"<<endl;
cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
int t=(k+flag)%4;
for(int i=0;i<13;i++)
{ if(i==12)
cout<<"|"<<per[t].p[i].num<<' '<<per[t].p[i].num<<"|"<<endl;
else cout<<"|"<<per[t].p[i].num<<' '<<per[t].p[i].num;
}
for(int i=0;i<13;i++)
{if(i==12) cout<<"|"<<' '<<per[t].p[i].hs<<' '<<"|"<<endl;
else cout<<"|"<<' '<<per[t].p[i].hs<<' ';
}
for(int i=0;i<13;i++)
{ if(i==12)
cout<<"|"<<per[t].p[i].num<<' '<<per[t].p[i].num<<"|"<<endl;
else cout<<"|"<<per[t].p[i].num<<' '<<per[t].p[i].num;
}
cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
} cout<<endl;
cin>>n;
} return 0;
}