假设你正在和小杰炸金花,现在给你 6 张牌 , 你是否算出你是赢了还是输了
牌型 :
豹子:三张点相同的牌。例:AAA(最大的豹子)、222(最小的豹子)。
顺子:即三张点数连续递增的牌,比如 QKA(最大的顺子),若双方都是顺子,点数大者为大。
对子:即两张点数一样的牌带一张单牌,比如 AAK , 223, 若双方都是对子,则成对的牌点数大者为大,如果那一对也一样,则比较单张的大小.
单张:即三张牌不是上述的三种。单张的比较大小方式是,先比较点数最大的,再比较点数第二大的,再比较点数第三大的。
牌型大小:
豹子 > 顺子 > 对子 > 单张
牌的大小:
为了降低题目难度 , 将字符都用数字代替 , 且顺子不考虑A23情况
J = 11 , Q = 12 , K = 13 , A = 14;
A > K > Q > J > 10 > 9 > 8 > 7 > 6 > 5 > 4 > 3 > 2
特殊规则 :
235是最小的牌,但是比所有豹子大
首先要把双方牌型按照不同的类型分类,其次是依据游戏规则比较牌面大小
坑1:对子,当点数一样大时需要比较单张大小
坑2:2 3 5比所有的豹子大
坑3: 2 3 5是最小的牌
所以我认为2,3,5这三张特殊牌的规则弄明白了,这个题也就不是很难了
#include<iostream>
#include<string.h>
using namespace std;
int baozi(int a,int b,int c){
if(a==b && b==c)
return 1;
return 0;
}
int sunzi(int a,int b,int c){
if((2*a==b+c && (b==a+1 || c==a+1))||(2*b==a+c && (a==b+1 || c==b+1))||(2*c==a+b && (a==c+1 || b==c+1)))
return 1;
return 0;
}
int duizi(int a,int b,int c){
if((a==b&&a!=c)||(a==c&&a!=b)||(b==c&&a!=b))
return 1;
return 0;
}
int teshu(int a,int b,int c){
int max,min,mid;
max=(a>b)?(a>c?a:c):(b>c?b:c);
min=(a<b)?(a<c?a:c):(b<c?b:c);
mid=a+c+b-max-min;
if(max==5 && mid==3 && min==2)
return 1;
return 0;
}
int main()
{
int a,b,c,d,e,f,n;
int r[100],i=0;
memset(r,0,100);
cin>>n;
while(n--){
cin>>a>>b>>c>>d>>e>>f;
if(baozi(a,b,c)){
if(teshu(d,e,f)==0){
if(baozi(d,e,f)){
if(a>d)
r[i]=1;
}
else
r[i]=1;
}
i++;
}
else if(sunzi(a,b,c)){
if(baozi(d,e,f)==0){
if(sunzi(d,e,f)){
int max1,max2;
max1=(a>b)?(a>c?a:c):(b>c?b:c);
max2=(d>e)?(d>f?d:f):(e>f?e:f);
if(max1>max2)
r[i]=1;
}
else
r[i]=1;
}
i++;
}
else if(duizi(a,b,c)){
if(baozi(d,e,f)+sunzi(d,e,f)==0){
if(duizi(d,e,f)){
int dou1,dou2;
if(a==b||a==c){
dou1=a;
}
else if(b==c)
dou1=b;
if(d==e||d==f)
dou2=d;
else if(e==f)
dou2=f;
if(dou1>dou2)
r[i]=1;
else if((a+b+c-2*dou1)>(d+e+f-2*dou2))
r[i]=1;
}
else
r[i]=1;
}
i++;
}
else if(!teshu(a,b,c)){
if(baozi(d,e,f)+sunzi(d,e,f)+duizi(d,e,f)+teshu(e,d,f)==0){
int max1,max2,min1,min2;
max1=(a>b)?(a>c?a:c):(b>c?b:c);
max2=(d>e)?(d>f?d:f):(e>f?e:f);
min1=(a<b)?(a<c?a:c):(b<c?b:c);
min2=(d<e)?(d<f?d:f):(e<f?e:f);
if(max1>max2)
r[i]=1;
else if((a+b+c-min1-max1)>(d+e+f-min2-max2))
r[i]=1;
else if(min1>min2)
r[i]=1;
}
else if(teshu(d,e,f))
r[i]=1;
i++;
}
else
{
if(baozi(d,e,f))
r[i]=1;
i++;
}
}
for(int j=0;j<i;j++){
if(r[j]!=0)
cout<<"happy"<<endl;
else
cout<<"sad"<<endl;
}
return 0;
}