虽然没有什么技术含量,但这类题需要非常细心,而自己在这方面弱爆了......
这个程序倒是有点实用性,万一以后哪天写个扑克程序,还可以用用啊
#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;
}
更多推荐
TJU-3979. Cards(模拟)
发布评论