题目描述
LZY发明了一个纸牌游戏,取名叫做LZY牛牛。他的好伙伴WLJ对这个游戏很感兴趣,于是他们俩玩起了这个游戏。
每人抽取五张扑克牌,牌堆里的扑克牌有 A,2,3,4,5,6,7,8,9,10,J,Q,K 这13种点数的扑克牌若干。
扑克牌 10,J,Q,K都视为点数 10,扑克牌 A 视为点数 1,其他牌数字为多少则点数为多少。
当我们能从五张中挑选3张相加,使得他能被10整除,那么称之为“牛”,再把剩下的两张相加,取10的余数为Y,当Y值为0的时候,称为“牛牛”,否则为“牛Y”。若无法挑选到3张牌相加能被10整除,则为“无牛”。
规则如下:
大小判断 先判断是否有牛,牛牛>牛9>牛8>牛7>牛6>牛5>牛4>牛3>牛2>牛1>无牛。
当牛相同时,判断牌面大小,从大到小判断,若相同,判断后一张,直到出现有一张不同或五张全相同,牌面大小 K>Q>J>10>9>8>7>6>5>4>3>2>A。
若LZY赢则输出“LZY”,LZY输则输出“WLJ”,平局输出“level”。
输入
输入有多组样例,每组样例先输入LZY的五张牌,再输入WLJ的五张牌。
输出
若LZY赢则输出“LZY”,LZY输则输出“WLJ”,平局则输出“level”。
样例输入
8 3 J K 2
A 2 3 4 5
8 5 J K 2
A 2 3 4 5
样例输出
WLJ
LZY
代码
#include<bits/stdc++.h>
using namespace std;
bool cmp(int a,int b){//从大到小排序
return a>b;
}
int main(){
ios::sync_with_stdio(false);
char a[5][2];//输入的基础字符
char b[5][2];//输入的基础字符
int a1[5];//判断牛牛
int b1[5];//判断牛牛
int a2[5];//判断卡牌大小
int b2[5];//判断卡牌大小
while(~scanf("%s%s%s%s%s%s%s%s%s%s",&a[0],&a[1],&a[2],&a[3],&a[4],&b[0],&b[1],&b[2],&b[3],&b[4])){
//cin>>a[0]>>a[1]>>a[2]>>a[3]>>a[4]>>b[0]>>b[1]>>b[2]>>b[3]>>b[4]
//~scanf("%s%s%s%s%s%s%s%s%s%s",&a[0],&a[1],&a[2],&a[3],&a[4],&b[0],&b[1],&b[2],&b[3],&b[4])
int max=0,min=0;
for(int i=0;i<5;i++){//转化为数值 赋值给a1,a2,b1,b2
if(a[i][0]=='A') a1[i]=1,a2[i]=1;
if(a[i][0]=='2') a1[i]=2,a2[i]=2;
if(a[i][0]=='3') a1[i]=3,a2[i]=3;
if(a[i][0]=='4') a1[i]=4,a2[i]=4;
if(a[i][0]=='5') a1[i]=5,a2[i]=5;
if(a[i][0]=='6') a1[i]=6,a2[i]=6;
if(a[i][0]=='7') a1[i]=7,a2[i]=7;
if(a[i][0]=='8') a1[i]=8,a2[i]=8;
if(a[i][0]=='9') a1[i]=9,a2[i]=9;
if(a[i][0]=='1'&&a[i][1]=='0') a1[i]=10,a2[i]=10;
if(a[i][0]=='J') a1[i]=10,a2[i]=11;
if(a[i][0]=='Q') a1[i]=10,a2[i]=12;
if(a[i][0]=='K') a1[i]=10,a2[i]=13;
if(b[i][0]=='A') b1[i]=1,b2[i]=1;
if(b[i][0]=='2') b1[i]=2,b2[i]=2;
if(b[i][0]=='3') b1[i]=3,b2[i]=3;
if(b[i][0]=='4') b1[i]=4,b2[i]=4;
if(b[i][0]=='5') b1[i]=5,b2[i]=5;
if(b[i][0]=='6') b1[i]=6,b2[i]=6;
if(b[i][0]=='7') b1[i]=7,b2[i]=7;
if(b[i][0]=='8') b1[i]=8,b2[i]=8;
if(b[i][0]=='9') b1[i]=9,b2[i]=9;
if(b[i][0]=='1'&&b[i][1]=='0') b1[i]=10,b2[i]=10;
if(b[i][0]=='J') b1[i]=10,b2[i]=11;
if(b[i][0]=='Q') b1[i]=10,b2[i]=12;
if(b[i][0]=='K') b1[i]=10,b2[i]=13;
}
for(int i=0;i<5;i++){//凑牛头的第一张牌
for(int j=0;j<5&&j!=i;j++){//凑牛头的第二张牌
for(int z=0;z<5&&z!=i&&z!=j;z++){//凑牛头的第二张牌
if((a1[i]+a1[j]+a1[z])%10==0){//判断是否有牛
if((a1[0]+a1[1]+a1[2]+a1[3]+a1[4])%10==0)//判断是否是牛牛
max=10;
if(((a1[0]+a1[1]+a1[2]+a1[3]+a1[4])%10)>max){//判断是牛几
max=(a1[0]+a1[1]+a1[2]+a1[3]+a1[4])%10;
}
}
if((b1[i]+b1[j]+b1[z])%10==0){//判断是否有牛
if((b1[0]+b1[1]+b1[2]+b1[3]+b1[4])%10==0)//判断是否是牛牛
min=10;
if(((b1[0]+b1[1]+b1[2]+b1[3]+b1[4])%10)>min){//判断是牛几
min=(b1[0]+b1[1]+b1[2]+b1[3]+b1[4])%10;
}
}
}
}
}
//cout << max << endl << min <<endl;
if(max>min)//判断谁的牛大
cout<<"LZY"<<endl;
else if(min>max)
cout<<"WLJ"<<endl;
else{
sort(a2,a2+5,cmp);//快排
sort(b2,b2+5,cmp);//快排
for(int i=0;i<5;i++){//两人从最大的一张到最小的一张进行判断是否相等
if(a2[i]>b2[i]){
cout<<"LZY"<<endl;
break;
}
if(a2[i]<b2[i]){
cout<<"WLJ"<<endl;
break;
}
if(i==4&&a2[i]==b2[i])//两人手牌完全相同
cout<<"level"<<endl;
}
}
memset(a,' ',sizeof(a));//清空数组a
memset(b,' ',sizeof(b));//清空数组b
}
return 0 ;
}
思路
输入数据判断是否能组成牛
如果能组成,用for取最大牛
再判断谁的牛大
如果牛相同
判断手牌大小