admin管理员组

文章数量:1622625

虽然没有什么技术含量,但这类题需要非常细心,而自己在这方面弱爆了......

这个程序倒是有点实用性,万一以后哪天写个扑克程序,还可以用用啊


#include <cstdio>
#include <cstdlib>
#include <cstring>
#define Awin {printf("XingYao wins!\n"); return ;}
#define Bwin {printf("XiangYu wins!\n"); return ;}
#define Tie  {printf("Virus!\n");                return ;}
using namespace std;
int CardNum[128];

struct Card
{
	int Num;
	char Suit;
};

void init()
{
	int i;
	memset(CardNum,0,sizeof(CardNum));
	for(i=2;i<=9;i++)
		CardNum[48+i]=i;
	CardNum['T']=10;
	CardNum['J']=11;
	CardNum['Q']=12;
	CardNum['K']=13;
	CardNum['A']=14;
}

int Baozi(Card *a)
{
	if (a[0].Num==a[1].Num && a[1].Num==a[2].Num)
		return 5;
	else return 0;
}

int Tonghuashun(Card *a)
{
	if((a[0].Suit==a[1].Suit && a[1].Suit==a[2].Suit)
	&&(a[0].Num-a[1].Num==1  && a[1].Num-a[2].Num==1))
		return 4;
	else return 0;
}

int Jinhua(Card *a)
{
	if((a[0].Suit==a[1].Suit && a[1].Suit==a[2].Suit)
	&&(a[1].Num!=a[0].Num  && a[2].Num!=a[1].Num && a[0].Num!=a[2].Num))
		return 3;
	else return 0;	
}

int Shunzi(Card *a)
{
	if (a[0].Num-a[1].Num==1  && a[1].Num-a[2].Num==1)
		return 2;
	else return 0;
}

int Duizi(Card *a)
{
	if(a[0].Num==a[1].Num || a[1].Num==a[2].Num)
		return 1;
	else return 0;
}

void work()
{
	int i,j,suitA,suitB;
	int Asame,Adif;
	int Bsame,Bdif;
	char ch1,ch2;
	Card A[3],B[3],temp;
	
	scanf("%c%c",&ch1,&ch2);
	A[0].Num=CardNum[ch1];
	A[0].Suit=ch2;
	for(i=1;i<3;i++)
	{
		getchar();
		scanf("%c%c",&ch1,&ch2);
		A[i].Num=CardNum[ch1];
		A[i].Suit=ch2;		
	}
	for(i=0;i<2;i++)
		for(j=i+1;j<3;j++)
			if(A[i].Num<A[j].Num)
			{
				temp=A[i];
				A[i]=A[j];
				A[j]=temp;
			}
			
	for(i=0;i<3;i++)
	{
		getchar();
		scanf("%c%c",&ch1,&ch2);
		B[i].Num=CardNum[ch1];
		B[i].Suit=ch2;		
	}
	for(i=0;i<2;i++)
		for(j=i+1;j<3;j++)
			if(B[i].Num<B[j].Num)
			{
				temp=B[i];
				B[i]=B[j];
				B[j]=temp;
			}
			
	suitA=0;
	if(suitA==0) suitA=Baozi(A);
	if(suitA==0) suitA=Tonghuashun(A);
	if(suitA==0) suitA=Jinhua(A);
	if(suitA==0) suitA=Shunzi(A);
	if(suitA==0) suitA=Duizi(A);

	suitB=0;
	if(suitB==0) suitB=Baozi(B);
	if(suitB==0) suitB=Tonghuashun(B);
	if(suitB==0) suitB=Jinhua(B);
	if(suitB==0) suitB=Shunzi(B);
	if(suitB==0) suitB=Duizi(B);
	
/*		
	for(i=0;i<3;i++) printf("%d%c ",A[i].Num,A[i].Suit); printf("\n");
	for(i=0;i<3;i++) printf("%d%c ",B[i].Num,B[i].Suit); printf("\n");
	printf("A=%d  B=%d\n",suitA,suitB);	
*/
	
	if(suitA>suitB) Awin
	else if(suitA<suitB) Bwin
	else if(suitA==1)
	{
		if(A[1].Num>B[1].Num) Awin
		else if(A[1].Num<B[1].Num) Bwin
		else 
		{
			if(A[1].Num==A[0].Num)
				Adif=A[2].Num;
			else Adif=A[0].Num;
			
			if(B[1].Num==B[0].Num)
				Bdif=B[2].Num;
			else Bdif=B[0].Num;
			
			if(A[1].Num>B[1].Num) Awin
			else if(A[1].Num<B[1].Num) Bwin
			else if(Adif>Bdif) Awin
			else if(Adif<Bdif) Bwin
			else Tie
		}
	}
	else
	{
		for(i=0;i<3;i++)
			if(A[i].Num>B[i].Num) Awin
			else if(A[i].Num<B[i].Num) Bwin
	}
	Tie
	
}


void op()
{
   freopen("in.txt","r",stdin);//从in.txt中读取数据
   freopen("out.txt","w",stdout);//输出到out.txt文件
}

int main()
{
	int T;
	//op();
	init();
	scanf("%d",&T);
	while(T--)
	{
		getchar();
		work();
	}
	return 0;
}



本文标签: TJUCards