Three Card

/*题目意思,玩过牌的都能看得懂,三张牌,分谁赢谁输。简单模拟题。但是情况巨多!我设置了两个结构体,一个存,将要处理的数据,一个存处理后的数据!然后讨论处理后的情况就可以了。*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
char s[100];
struct node
{
	int val;//权值
	int Max;//最大值
	int Dui;//对子的值
	int ot_vv[2];//当权值为2时要比较所有的数暂存此数组
	node(){val=0;Max=0;Dui=0;ot_vv[0]=0,ot_vv[1]=0;}
}q,p;//两个玩家
struct pai
{
	int a[3];
	char c[3];
}q1,p1;//两玩家手中的牌
int check(char cc)
{
	if(cc=='T') return 10;
	else if(cc=='J') return 11;
	else if(cc=='Q') return 12;
	else if(cc=='K') return 13;
	else if(cc=='A') return 14;
	else return int(cc-48);
}
void init()
{
	q1.a[0]=check(s[0]);
	q1.c[0]=s[1];
	q1.a[1]=check(s[3]);
	q1.c[1]=s[4];
	q1.a[2]=check(s[6]);
	q1.c[2]=s[7];
	p1.a[0]=check(s[9]);
	p1.c[0]=s[10];
	p1.a[1]=check(s[12]);
	p1.c[1]=s[13];
	p1.a[2]=check(s[15]);
	p1.c[2]=s[16];
}
void baozi(pai q1,pai p1)
{
	if(q1.a[0]==q1.a[1] && q1.a[2]==q1.a[1] )
	{ if(7>q.val) {q.val=7;q.Max=q1.a[2];}}
	if(p1.a[0]==p1.a[1] && p1.a[2]==p1.a[1] )
	{ if(7>p.val) {p.val=7;p.Max=p1.a[2];}}
}
void tonghuashun(pai q1,pai p1)
{
	if(q1.a[0]+1==q1.a[1] && q1.a[2]==q1.a[1]+1 && q1.c[0]==q1.c[1] && q1.c[1]==q1.c[2])
	{ if(6>q.val) {q.val=6;q.Max=q1.a[2];}}
	if(p1.a[0]+1==p1.a[1] && p1.a[2]==p1.a[1]+1 && p1.c[0]==p1.c[1] && p1.c[1]==p1.c[2])
	{ if(6>p.val) {p.val=6;p.Max=p1.a[2];}}
}
void jinhua(pai q1,pai p1)
{
	if(q1.c[0]==q1.c[1] && q1.c[1]==q1.c[2])
	{ if(5>q.val) {q.val=5;q.Max=q1.a[2];}}
	if(p1.c[0]==p1.c[1] && p1.c[1]==p1.c[2])
	{ if(5>p.val) {p.val=5;p.Max=p1.a[2];}}
}
void shunzi(pai q1,pai p1)
{
	if(q1.a[0]+1==q1.a[1] && q1.a[2]==q1.a[1]+1)
	{ if(4>q.val) {q.val=4;q.Max=q1.a[2];}}
	if(p1.a[0]+1==p1.a[1] && p1.a[2]==p1.a[1]+1)
	{ if(4>p.val) {p.val=4;p.Max=p1.a[2];}}
}
void duizi(pai q1,pai p1)
{
	//对子需要做特殊处理
	if(q1.a[0]==q1.a[1] || q1.a[2]==q1.a[1] || q1.a[2]==q1.a[0])
	{
		if(3>q.val) 
		{
			q.val=3;
			if(q1.a[0]==q1.a[1]) {q.Dui=q1.a[0];q.Max=q1.a[2];}
			if(q1.a[2]==q1.a[1])  {q.Dui=q1.a[1];q.Max=q1.a[0];}
			if(q1.a[2]==q1.a[0])  {q.Dui=q1.a[0];q.Max=q1.a[1];}
		}
	}
	if(p1.a[0]==p1.a[1] || p1.a[2]==p1.a[1] || p1.a[2]==p1.a[0])
	{ 
		if(3>p.val) 
		{
			p.val=3;
			if(p1.a[0]==p1.a[1]) {p.Dui=p1.a[0];p.Max=p1.a[2];}
			if(p1.a[2]==p1.a[1])  {p.Dui=p1.a[1];p.Max=p1.a[0];}
			if(p1.a[2]==p1.a[0])  {p.Dui=p1.a[0];p.Max=p1.a[1];}
		}
	}
}
void other(pai q1,pai p1)
{
	if(2>q.val)
	{
		q.val=2;q.Max=q1.a[2];
		q.ot_vv[0]=q1.a[0];
		q.ot_vv[1]=q1.a[1];
	}
	if(2>p.val)
	{
		p.val=2;p.Max=p1.a[2];
		p.ot_vv[0]=p1.a[0];
		p.ot_vv[1]=p1.a[1];
	}
}
void doing()
{
	baozi(q1,p1);
	tonghuashun(q1,p1);
	jinhua(q1,p1);
	shunzi(q1,p1);
	duizi(q1,p1);
	other(q1,p1);
}
void treat()
{
	int ff=0;
	if(q.val==p.val && q.val>2)
	{
		if(q.Dui>0 && q.val==3 && p.val==3)
		{
			if(q.Dui>p.Dui ) ff=2;
			else if(q.Dui<p.Dui) ff=1;
			else if(q.Dui==p.Dui && q.Max>p.Max) ff=2;
			else if(q.Dui==p.Dui && q.Max<p.Max) ff=1;
		}
		else if(q.Max>p.Max) ff=2;
		else if(q.Max=p.Max) ff=1; 
	}
	else if(q.val==p.val && q.val==2)
	{
		if(q.Max>p.Max) ff=2;
		else if(q.Max==p.Max && q.ot_vv[1]>p.ot_vv[1]) ff=2;
		else if(q.Max==p.Max && q.ot_vv[1]==p.ot_vv[1] && q.ot_vv[0]>p.ot_vv[0]) ff=2;
		else if(q.Max==p.Max && q.ot_vv[1]==p.ot_vv[1] && q.ot_vv[0]==p.ot_vv[0]) ff=0;
		else ff=1;
	}
	else if(q.val>p.val) ff=2;
	else ff=1;

	if(ff==2) cout<<"LaoPei wins!"<<endl;
	else if(ff==1) cout<<"A q wins!"<<endl;
	else cout<<"Oh my god, who wins, Debugcool knows!"<<endl;
}
void yuchuli()
{
	//程序预处理
	q.Dui=0;q.Dui=0;q.val=0;
	p.Dui=0;p.Dui=0;p.val=0;
	q.ot_vv[0]=0,q.ot_vv[1]=0;
	p.ot_vv[0]=0,p.ot_vv[1]=0;
}
int main ()
{
	//freopen("3.txt","r",stdin);
	//freopen("a.in","r",stdin);
	//freopen("3.txt","w",stdout);
	while(gets(s))
	{
		//cout<<s<<endl;
		yuchuli();
		init();
		sort(q1.a,q1.a+3);
		sort(p1.a,p1.a+3);
		//cout<<q1.a[0]<<" "<<q1.a[1]<<" "<<q1.a[2]<<" "<<q1.c[0]<<" "<<q1.c[1]<<" "<<q1.c[2]<<endl;
		//cout<<p1.a[0]<<" "<<p1.a[1]<<" "<<p1.a[2]<<" "<<p1.c[0]<<" "<<p1.c[1]<<" "<<p1.c[2]<<endl;
		doing();
		//cout<<p.Dui<<" "<<p.Max<<" "<<p.val<<endl;
		//cout<<q.Dui<<" "<<q.Max<<" "<<q.val<<endl;
		treat();
		memset(s,'\0',sizeof(s));
	}
	return 0;
}


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这道题目要求定义一个名为"card"的扑克牌类,该类有两个私有访问权限的字符串变量,分别为"face"和"suit"。其中,face描述牌面的点数(例如:"ace","deuce","three"等),suit描述牌的花色(例如:"heart","spade","diamond","club"等)。 ### 回答2: ve\", \"six\", \"seven\", \"eight\", \"nine\", \"ten\", \"jack\", \"queen\", \"king\"),suit描述一张牌的花色(如:\"spades\", \"hearts\", \"diamonds\", \"clubs\"),并且有一个public访问权限的函数返回格式为face of suit的字符串。此外,该类还需要一个无参数的构造函数,一个有两个参数的构造函数,一个拷贝构造函数和一个析构函数。 以下是card类的代码实现: ```c++ #include <iostream> #include <string> class card { private: std::string face; std::string suit; public: card() : face(""), suit("") {} card(const std::string& f, const std::string& s) : face(f), suit(s) {} card(const card& other) : face(other.face), suit(other.suit) {} ~card() {} std::string getCard() const { return face + " of " + suit; } }; int main() { card card1("ace", "spades"); // 创建一张牌,牌面是ace,花色是spades std::cout << card1.getCard() << std::endl; // 输出:ace of spades card card2(card1); // 拷贝构造一个牌 std::cout << card2.getCard() << std::endl; // 输出:ace of spades return 0; } ``` 在上面的代码中,我们定义了一个名为card的类,该类有两个私有访问权限的字符串变量face和suit,分别表示牌面和花色。card类有一个公共访问权限的getCard函数,返回格式为face of suit的字符串。我们还定义了一个默认构造函数、一个有两个参数的构造函数、一个拷贝构造函数和一个析构函数。在主函数中,我们创建了一张card对象,调用了getCard函数来输出这张牌的牌面和花色,然后拷贝创建了一张新的牌,再次调用了getCard函数来输出这张新牌的牌面和花色。 ### 回答3: rst\"等),suit描述一张扑克牌的花色(如:\"hearts\",\"diamonds\",\"clubs\",\"spades\")。该类还应该有一个构造函数,接受两个参数,即牌面值和花色,并将它们分别存入face和suit变量中。该类应该还有一个公共访问权限的成员函数,名为toString,它不接受任何参数,并返回一个字符串,该字符串表示该张扑克牌,格式如下:「牌面值 of 花色」(例如:「ace of spades」)。 在定义扑克牌类的过程中,需要注意以下几点: 1.使用private访问权限来限制face和suit变量的访问,以保证数据的安全性。 2.构造函数的作用是创建该类的对象,并给成员变量赋值。因此,在构造函数中,需要将形参中传入的牌面值和花色分别赋值给face和suit变量。 3.toString函数返回一个字符串,该字符串表示该张扑克牌,格式为「牌面值 of 花色」。在该函数中,需要使用string类型的加法运算符(+)将face变量的值与\" of \"和suit变量的值连接起来,然后返回连接后的字符串。 以下是一个完整的扑克牌类的实现: ``` #include<string> using namespace std; class card{ private: string face; string suit; public: card(string f, string s){ face = f; suit = s; } string toString(){ return face + " of " + suit; } }; ``` 以上代码中,定义了一个名为card的扑克牌类,该类有两个private访问权限的字符串变量face和suit。构造函数card用于初始化face和suit变量,函数toString用于将face和suit变量的值组装成表示该张扑克牌的字符串。通过这些代码,我们可以创建并打印一张扑克牌的信息,示例如下: ``` int main(){ card c("ace", "spades"); cout << c.toString() << endl; return 0; } 输出: ace of spades ``` 以上代码中,首先创建了一个card对象,表示了一张黑桃A牌。然后调用了该对象的toString函数,将其转换为字符串输出,得到的结果是「ace of spades」。通过这种方式,我们可以很方便地创建不同花色和牌面值的扑克牌,并进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值