Пример #1
0
    private static int CheckMenZi(int[] c, int start, int n, ref RongData rd)
    {
        var s = start;

        for (int i = start; i < MAX_C; i++)
        {
            if (c[i] == 0)
            {
                s++;
                continue;
            }
            if (c[i] >= 3)
            {
                c[i]      -= 3;
                rd.mens[n] = new[] { i, i, i };
                n++;
                return(CheckMenZi(c, s, n, ref rd));
            }
            if (i <= 26 && c[i + 1] > 0 && c[i + 2] > 0)
            {
                c[i]--;
                c[i + 1]--;
                c[i + 2]--;
                rd.mens[n] = new[] { i, i + 1, i + 2 };
                n++;
                return(CheckMenZi(c, s, n, ref rd));
            }
            return(0);
        }
        return(1);
    }
Пример #2
0
    // 0-8   M1-M9
    // 10-18 S1-S9
    // 20-28 P1-P9
    // 30 32 34 36
    // 38 40 42
    public static int CheckRong(int[] c, out List <RongData> rdList)
    {
        rdList = new List <RongData>();
        //guoshi
        if (CheckGuoShi(c))
        {
            return(13);
        }
        //qitui
        if (CheckQiDui(c))
        {
            return(7);
        }
        //
        var start = 0;

        for (int i = 0; i < MAX_C; i++)
        {
            if (c[i] == 0)
            {
                start++;
                continue;
            }
            if (c[i] >= 2)
            {
                var cc = DeepCopy(c);
                cc[i] -= 2;
                var rongData = new RongData();
                rongData.atama = i;
                if (CheckMenZi(cc, start, 0, ref rongData) > 0)
                {
                    rdList.Add(rongData);
                }
            }
        }
        return(rdList.Count > 0 ? 1 : 0);
    }