金花--1053

假设你正在和小杰炸金花,现在给你 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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值