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); }
// 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); }