新的麻将和牌程序(递归)

程序|递归

昨天写的那个太幼稚了,今天写的使用了递归,我用九连宝灯(麻将的一种和法)进行测试,可以通过。比昨天的精简了一些,去掉了那个实际上没有用的类。没有考虑十三幺和七小对。

public class MaJiang2
{
    private boolean jiang=false;//是否找到将
    public MaJiang2(){}

    //花色,判断这个花色是否被减完了(如果没有减完自然没有和)
    private int huase(int[] hua)
    {
        if (hua.length==7)
        {
            //判断字,自比较特殊,没有顺
            for (int i=0;i<hua.length ;i++ )
            {
                if (hua[i]==3||hua[i]==4)
                {
                    hua[i]=0;
                    huase(hua);
                }
                //如果字有两个,肯定是将
                if (hua[i]==2&&!jiang)
                {
                    hua[i]=0;
                    jiang=true;
                    huase(hua);
                }
            }
        }
        else
        {
            for (int i=0;i<hua.length ;i++ )
            {
                //如果没有将,先把将减出去
                if (!jiang&&hua[i]>=2)
                {
                    hua[i]=hua[i]-2;
                    jiang=true;
                    int fanhui=huase(hua);
                    //如果递归回来依旧没有减完,则把将加回去
                    if (fanhui!=0)
                    {
                        hua[i]=hua[i]+2;
                        jiang=false;
                    }
                }
                if (hua[i]!=0&&i<7&&hua[i+1]!=0&&hua[i+2]!=0)
                {
                    hua[i]--;
                    hua[i+1]--;
                    hua[i+2]--;
                    huase(hua);
                    int fanhui=huase(hua);
                    //如果递归回来依旧没有减完,减去的加回去
                    if (fanhui!=0)
                    {
                        hua[i]++;
                        hua[i+1]++;
                        hua[i+2]++;
                    }
                }
                if (hua[i]==3||hua[i]==4)
                {
                    int temp=hua[i];
                    hua[i]=0;
                    huase(hua);
                    int fanhui=huase(hua);
                    //如果递归回来依旧没有减完,减去的加回去
                    if (fanhui!=0)
                    {
                        hua[i]++;
                        hua[i]=temp;
                    }
                }
            }
        }
        int re=0;
        //最后判断减没减完
        for (int i=0;i<hua.length ;i++ )
        {
            re=re+hua[i];
        }
        return re;
    }

    public void Hu(int[] aWan,int[] aTiao,int[] aTong,int[] aZi)
    {
        //先从字开始,如果某一花色计算完之后依旧不为0,则肯定不和。如果所有的花色全部减完了,就和了,呵呵:-〉
        int jieguo=huase(aZi);
        if (jieguo!=0)
        {
            System.out.println("没和");
        }
        else if ((jieguo=huase(aWan))!=0)
        {
            System.out.println("没和");
        }
        else if ((jieguo=huase(aTiao))!=0)
        {
            System.out.println("没和");
        }
        else if ((jieguo=huase(aTong))!=0)
        {
            System.out.println("没和");
        }
        else
        {
            System.out.println("和了,真不容易,一脑门子汉");
        }
    }
    public static void main(String[] args)
    {
        MaJiang2 mj=new MaJiang2();
        int[] w={3,1,1,2,1,1,1,1,3};
        int[] ti={0,0,0,0,0,0,0,0,0};
        int[] to={0,0,0,0,0,0,0,0,0};
        int[] z={0,0,0,0,0,0,0};

        mj.Hu(w,ti,to,z);
    }
}

如果有什么错误的话,请告诉我,谢谢!!!

时间: 2024-08-02 22:45:26

新的麻将和牌程序(递归)的相关文章

在线互动促销新模式案例-XX牌冰红茶促销

在线互动促销新模式案例-XX牌冰红茶促销 之前在便利店买了瓶冰红茶,瓶标上"痛快喝疯狂赢,100%中奖"的icon格外醒目,原来是XX牌冰红茶夏季促销又再次来袭.脑海中还依稀记得去年夏季那个"XX牌冰力畅爽超级赢"的超人促销装瓶子.一时兴起,想来对比研究下这两次UTC促销活动. 冰红茶的目标消费群年龄在15-22岁,主要为年轻有活力的学生族群.冰力十足一直是XX牌冰红茶的品牌核心诉求.这两次促销的主题设计都紧扣品牌DNA,同时又直接诉求了有奖促销的活动性质.从大奖数

小程序.大商机.新未来”云指小程序研讨会成功举办

本文讲的是 : 小程序.大商机.新未来"云指小程序研讨会成功举办   ,8月5日,由云指主办的"小程序.大商机.新未来"小程序研讨会在佛山成功举办,会议汇聚了全国60多位互联网行业精英,共同探讨了微信小程序发展的前景,剖析了如何抢占小程序创造的千亿市场;同时对云指小程序产品进行了展示和体验. 本次小程序研讨会,云指邀请了广东医联网公司总裁.华南理工大学电子商务导师韦海先生就小程序入口.价值和未来的发展趋势进行了一个分享.小程序作为腾讯一个战略级别的产品,与微信强强联合,一端连

程序调度:新的windows Azure计划程序服务

今天早上我们推出了windows Azure的另一组增强功能.今天的新功能包括: 程序调度:新的windows Azure计划程序服务 存储:新的同步读写冗余存储方案 监测:windows Azure服务的监测及诊断的增强功能 所有的这些改进现在都可以使用(注意有些功能仍然是在预览).下面是有关他们的更多详细信息: 程序调度:新的windows Azure计划程序服务 我很高兴宣布我们可以预览新的Windows Azure调度服务.Windows Azure调度服务允许你安排启用HTTP/S端点

新的AutoCAD2006 托管C#程序向导

程序|托管   A u t o d e s k 发 布 的 " A u t o C A D 托 管 C # 应 用 程 序 向 导 " 写 得 非 常 的 简 单 , 几 乎 没 有 什 么 选 项 . 它 只 是为 你 的 O b j e c t A R X 程 序 添 加 了 " A u t o d e s k . A u t o C A D . R u n t i m e " 这 一 个 命 名 空 间 . 但 在 大 多 数 情 况 下 , 你 还 需 要

一起学Windows Phone 7开发(七.新旧版SDK开发程序的转换)

Windows Phone 7在二月份发布后,就随着一起发布了其SDK(我之前也是用的这个版本),但是几个月后又发布了新的SDK,在这个SDK中还包含了一个免费的 Visual studio 2010 express版本.这时问题就出来了,如果之前安装了老版本的SDK,就需要全部卸载掉后,才能装新版SDK,这看起来很容易,但是一旦安装了新的 SDK后,在旧版上开发的程序,就全部不能跑了.这就需要有自已做一个手工的调整. 1.在\Properties\WMAppManifest.xml增加属性内容

IUNI手机黯然换帅 国产手机新品牌或洗牌

腾讯科技 郭晓峰 10月27日报道 再过20多天,由金立投资设立的手机品牌IUNI将迎来一周年庆,不过有趣的是,IUNI手机的掌舵人何骁军却悄悄辞去了总经理一职. 腾讯科技从可靠渠道获悉,何骁军国庆节后就提出了辞呈,目前处于休假状态,而接替者是来自定位女性手机的小艾手机CEO霜梅. 从去年下半年开始,国内手机业掀起了一股创立新品牌的浪潮,许多传统手机大佬,纷纷选择创建子品牌或成立独立运营的新品牌,全力开拓互联网渠道,金立IUNI.一加.酷派大神.卓普小黑等新品牌手机在这种背景下应运而生.在加上锤

新措施:Java手机程序测试费用将降50%

6月3日消息,据国外媒体报道,Sun.Orange.沃达丰集团以及索尼爱立信移动通信正采取措施使Java手机程序开发更简单和便宜. 一年一度JavaOne开发者大会周二在旧金山举行,大会发布了新开源测试工具并宣布正在改善Java认证计划以加强认证Java ME手机程序.其目标是:简化该流程,减少软件开发商不得不为不同款式手机所做的测试数量. Orange合作伙伴计划技术总监Martin Wrigley在发布会上说:"没人喜欢测试."他表示,随着移动 应用市场的成熟,更多的测试开发人员会

新智元专访CVPR2019程序主席微软华刚 :arXiv让双盲评审形同虚设,单纯刷分把研究机械化,暴力化

5月11日凌晨,英伟达CEO 黄仁勋在 GPU峰会(GTC)上发表主旨演讲,介绍了这家在深度学习红利下飞速发展的芯片公司接下来的布局情况,黄仁勋在会上有"7大发布",分别是:"迄今为止最先进的深度学习 GPU  Tesla V 100"."面向TensorFlow 的TensorRT"."英伟达GPU云""AI 研究基础设施DGX-1和DGX Station"."开源自动驾驶超级计算机 Xavie

j2me新小组想在移动程序开发方面取点成就,但不知方向,请指教

问题描述 我们新的小组,想3g手机程序开发,但是由于经验问题了解的甚少,都在初学java,请有小组合作经验或者了解的诸位大侠指教一下,指明一下方向,注意什么问题,研发中如何让分配工作,应用会使用到什么知识,这个方面需要哪些能力呢??意在好心人士鼎力支持.新手分数确实支付不起呀 解决方案 解决方案二:没有小组经验,一直单打独斗,不过美工.程序员肯定是要有的.友情UP.解决方案三:确实是这样的,同意楼上观点解决方案四:那如果你们系统的制造一个正式的软件,需要做什么工作呢?如何完美.出色的制作出来?解