麻将清一色判和

该博客讨论了麻将中的清一色和牌规则,解释了如何判断在手中已有13张同一类型牌的情况下,通过获取第14张特定牌来达成mAAA+nABC+DD的和牌条件。雀儿需要根据此规则确定可能的和牌策略。

麻将清一色判和//C语言

题目

是这样的,雀儿最近迷上了打麻将。但是她不知道怎么才能清一色和牌。麻将的清一色和牌规则是:雀儿手里有13张同一类型的牌(万、筒或索中的一种,从1到9),现在要再获得一张牌(共计14张)使牌型满足mAAA+nABC+DD(AAA表示三张相同的牌,ABC表示三张连续升序的牌,DD表示两张相同的牌,m+n=4)。现在请你帮助雀儿判断雀儿手中的牌能不能在再获得一张牌后和牌。如果能和牌,请帮她找出她需要哪张牌。

示例

    #include <stdio.h>
    #include <stdlib.h>
    
    int Judge(int Pai[])
    {
        int Tip=0,jud,i;
        int rPai[10];
        for(i=1; i<10; i++)
            rPai[i]=Pai[i];
        for(i=1; i<10; i++)
        {
            Tip=rPai[i];
            switch(Tip)//对剩余牌数判断,决定算法
            {
            case 3:
                rPai[i]-=3;
            case 0:
                break;
            case 4:
                rPai[i]-=3;
            case 2:
            case 1:
                if(rPai[i+1]&&rPai[i+2]&&(i<8))
                    rPai[i]--,rPai[i+1]--,rPai[i+2]--,jud=1;
                else
                    jud=0;
                break;
            }
            if(rPai[i]&&jud)
                i--;
            else if(jud==0)
                return 0;
        }
        return 1;
    }
    
    int main()
    {
        int Pai[10],Q_Pai[10];
        int in,i,j,tip;
        printf("输入“1”开始程序:");
        scanf("%d",&tip);
        while(tip)
        {
            for(i=0; i<10; i++)
                Pai[i]=Q_Pai[i]=0;
            printf("\n输入雀儿手中的牌:");
            for(i=0; i<13; i++)
                scanf("%d",&in),Pai[in]++;//存1~9每种牌个数
            for(i=1; i<10; i++)
            {
                if(Pai[i]!=4)
                    Pai[i]++;
                else
                    continue;//判断该牌有没有被摸完,并摸牌测试
                for(j=1; j<10; j++)
                {
                    if(Pai[j]>=2)
                        Pai[j]-=2;
                    else
                        continue;//拿出对子,剩余肯定为三个刻子
                    if(Judge(Pai))//判断是不是三刻子
                        Q_Pai[i]=1;//Q_Pai做标记
                    Pai[j]+=2;//还原
                }//循环
                Pai[i]--;//还原
            }
            in=0,tip=1;
            for(i=1; i<10; i++)
            {
                in+=Q_Pai[i];
                if(in&&tip)
                    printf("\n雀儿可以和的牌有:"),tip=0;
                if(Q_Pai[i])
                    printf("%d ",i);
            }
            if(in==0)
                printf("\n雀儿不能和牌!");
            printf("\n");
            printf("________________________________________\n输入1继续判和\n输入0结束程序\n请输入:");
            scanf("%d",&tip);
        }
        return 0;
    }
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值