week2实验C

题意:
瑞神HRZ因为疫情在家闲得无聊,同时他又非常厉害,所有的课对他来说都是水一水就能拿A+,所以他无聊,找来了另外三个人:咕咕东,腾神以及zjm来打牌(天下苦瑞神久矣)。
显然,牌局由四个人构成,围成一圈。我们称四个方向为北 东 南 西。对应的英文是North,East,South,West。游戏一共由一副扑克,也就是52张构成。开始,我们指定一位发牌员(东南西北中的一个,用英文首字母标识)开始发牌,发牌顺序为顺时针,发牌员第一个不发自己,而是发他的下一个人(顺时针的下一个人)。这样,每个人都会拿到13张牌。
现在我们定义牌的顺序,首先,花色是(梅花)<(方片)<(黑桃)<(红桃),(输入时,我们用C,D,S,H分别表示梅花,方片,黑桃,红桃,即其单词首字母)。对于牌面的值,我们规定2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < T < J < Q < K < A。
现在你作为上帝,你要从小到大排序每个人手中的牌,并按照给定格式输出。(具体格式见输出描述和样例输出)。
Input:
输入包含多组数据
每组数据的第一行包含一个大写字符,表示发牌员是谁。如果该字符为‘#’则表示输入结束。
接下来有两行,每行有52个字符,表示了26张牌,两行加起来一共52张牌。每张牌都由两个字符组成,第一个字符表示花色,第二个字符表示数值。
Output:
输出多组数据发牌的结果,每组数据之后需要额外多输出一个空行!!!!!
每组数据应该由24行的组成,输出按照顺时针方向,始终先输出South Player的结果,每位玩家先输出一行即玩家名称(东南西北),接下来五行,第一行和第五行输出固定格式(见样例),第二行和第四行按顺序和格式输出数值(见样例),第三行按顺序和格式输出花色(见样例)。
Sample input:
N
CTCAH8CJD4C6D9SQC7S5HAD2HJH9CKD3H6D6D7H3HQH4C5DKHKS9 SJDTS3S7S4C4CQHTSAH2D8DJSTSKS2H5D5DQDAH7C9S8C8S6C2C3

Sample output:
South player:
±–±--±–±--±–±--±–±--±–±--±–±--±–+
|6 6|A A|6 6|J J|5 5|6 6|7 7|9 9|4 4|5 5|7 7|9 9|T T|
| C | C | D | D | S | S | S | S | H | H | H | H | H |
|6 6|A A|6 6|J J|5 5|6 6|7 7|9 9|4 4|5 5|7 7|9 9|T T|
±–±--±–±--±–±--±–±--±–±--±–±--±–+
West player:
±–±--±–±--±–±--±–±--±–±--±–±--±–+
|2 2|5 5|9 9|K K|5 5|7 7|9 9|4 4|T T|J J|A A|8 8|A A|
| C | C | C | C | D | D | D | S | S | S | S | H | H |
|2 2|5 5|9 9|K K|5 5|7 7|9 9|4 4|T T|J J|A A|8 8|A A|
±–±--±–±--±–±--±–±--±–±--±–±--±–+
North player:
±–±--±–±--±–±--±–±--±–±--±–±--±–+
|3 3|4 4|J J|2 2|3 3|T T|Q Q|K K|8 8|Q Q|K K|2 2|3 3|
| C | C | C | D | D | D | D | D | S | S | S | H | H |
|3 3|4 4|J J|2 2|3 3|T T|Q Q|K K|8 8|Q Q|K K|2 2|3 3|
±–±--±–±--±–±--±–±--±–±--±–±--±–+
East player:
±–±--±–±--±–±--±–±--±–±--±–±--±–+
|7 7|8 8|T T|Q Q|4 4|8 8|A A|2 2|3 3|6 6|J J|Q Q|K K|
| C | C | C | C | D | D | D | S | S | H | H | H | H |
|7 7|8 8|T T|Q Q|4 4|8 8|A A|2 2|3 3|6 6|J J|Q Q|K K|
±–±--±–±--±–±--±–±--±–±--±–±--±–+
思路:
首先定义了一个结构体包括牌的数字大小和花色,对数字和花色进行转换,把char型转换为int型。定义输入的开始的方向,如果输入的是#号,则退出。在进行牌的分发顺序时,通过循环实现,因为在输入时是分为两排进行输入,所以当循环输入到一半时,通过getchar()进行分行处理之后继续输入牌的数字和花色。然后对输入的方向进行判读,因为方向有四个方向,当方向不同时,牌分发的结果也不一样。在输出的结果时,都是从south方向开始输出,通过格式输出的形式进行输出,因为先输出数字大小,再在下一行输出花色,在下一行在输出数字大小。所以通过循环判断,通过i的判断,i可以取0,1,2三个数字,当i为1时即第二行时输出花色,i为0和2时,即为第一、三行时输出数字。
代码:
#include
#include
#include
#include
#include
#include
using namespace std;
map<char,int> num;
map<char,int> flower;
struct node{
char number;
char flow;
bool operator<(const node& te) const
{
if(flow!=te.flow)
//return flow<te.flow;
return flower[flow]<flower[te.flow];
//return number<te.number;
return num[number]<num[te.number];
}
}temp[4][13];
int main()
{
//char num[]={‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘T’,‘J’,‘Q’,‘K’,‘A’};
//flower[10]={‘C’,‘D’,‘S’,‘H’};
num[‘2’]=0;
num[‘3’]=1;
num[‘4’]=2;
num[‘5’]=3;
num[‘6’]=4;
num[‘7’]=5;
num[‘8’]=6;
num[‘9’]=7;
num[‘T’]=8;
num[‘J’]=9;
num[‘Q’]=10;
num[‘K’]=11;
num[‘A’]=12;
flower[‘C’]=0;
flower[‘D’]=1;
flower[‘S’]=2;
flower[‘H’]=3;
char begin;
while(1)
{
scanf("%c",&begin);
if(begin==’#’)
return 0;
getchar();
for(int i=0,j=0;j!=13;j++,i=0)
{
scanf("%c",&temp[i][j].flow);
scanf("%c",&temp[i][j].number);
i++;
scanf("%c",&temp[i][j].flow);
scanf("%c",&temp[i][j].number);
if(j6)
getchar();
i++;
scanf("%c",&temp[i][j].flow);
scanf("%c",&temp[i][j].number);
i++;
scanf("%c",&temp[i][j].flow);
scanf("%c",&temp[i][j].number);
}
getchar();
for(int i=0;i<4;i++)
{
sort(temp[i],temp[i]+13);
}
int am[4];
if(begin
’N’)
{
am[0]=1;
am[1]=2;
am[2]=3;
am[3]=0;
}
else if(begin==‘E’)
{
am[0]=0;
am[1]=1;
am[2]=2;
am[3]=3;
}
else if(begin==‘S’)
{
am[0]=3;
am[1]=0;
am[2]=1;
am[3]=2;
}
else if(begin==‘W’)
{
am[0]=2;
am[1]=3;
am[2]=0;
am[3]=1;
}
int cm;
cout<<“South player:”<<endl;
cout<<“±–±--±–±--±–±--±–±--±–±--±–±--±–+”<<endl;
cm=am[0];
for(int i=0;i<3;i++)
{
for(int j=0;j<13;j++)
{
if(i!=1)
{
cout<<"|"<<temp[cm][j].number<<" “<<temp[cm][j].number;
}
else
{
cout<<”|"<<" “<<temp[cm][j].flow<<” ";
}

	}
	cout<<"|"<<endl;
}
cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
cout<<"West player:"<<endl;
cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
cm=am[1];
for(int i=0;i<3;i++)
{
	for(int j=0;j<13;j++)
	{
		if(i!=1)
		{
			cout<<"|"<<temp[cm][j].number<<" "<<temp[cm][j].number;
		}
		else
		{
			cout<<"|"<<" "<<temp[cm][j].flow<<" ";
		}
		
	}
	cout<<"|"<<endl;
}
cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
cout<<"North player:"<<endl;
cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
cm=am[2];
for(int i=0;i<3;i++)
{
	for(int j=0;j<13;j++)
	{
		if(i!=1)
		{
			cout<<"|"<<temp[cm][j].number<<" "<<temp[cm][j].number;
		}
		else
		{
			cout<<"|"<<" "<<temp[cm][j].flow<<" ";
		}
		
	}
	cout<<"|"<<endl;
}
cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
cout<<"East player:"<<endl;
cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
cm=am[3];
for(int i=0;i<3;i++)
{
	for(int j=0;j<13;j++)
	{
		if(i!=1)
		{
			cout<<"|"<<temp[cm][j].number<<" "<<temp[cm][j].number;
		}
		else
		{
			cout<<"|"<<" "<<temp[cm][j].flow<<" ";
		}
		
	}
	cout<<"|"<<endl;
}
cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
	cout<<endl;
}
return 0;

}

发布了19 篇原创文章 · 获赞 0 · 访问量 218

猜你喜欢

转载自blog.csdn.net/weixin_45117273/article/details/104738691
今日推荐