五星组合,最多可以中五注,如上图投注内容为3,4,5,6,7,五星组合的购买注数和五星直选复式的算法一样,五位数进行组合,唯一的区别就是,五星组合可以中五星、四星、三星、二星、一星:
五星组合示例,如购买:4+5+6+7+8,该票共10元,由以下5注:45678(五星)、5678(四星)、678(三星)、78(二星)、8(一星)构成。开奖号码:45678,即可中五星、四星、三星、二星、一星各1注。
从万位、千位、百位、十位、个位中至少各选一个号码组成1-5星的组合,共五注,所选号码的个位与开奖号码对应位相同,则中1个5等奖;所选号码的个位、十位与开奖号码对应位相同,则中1个5等奖以及1个4等奖,依此类推,最高可中5个奖。
获取组合情况:
/// <summary> /// 根据投注内容得到所有的组合情况 /// </summary> /// <returns></returns> private List<string> GetAllBets(BasicModel.LotteryBasic.BetDetail item) { if (null == item || string.IsNullOrEmpty(item.BetContent)) return null; else { var bets = item.BetContent.Split(','); if (bets.Count() != 5) { return null; } else { var list = new List<string>(); var wan = bets[0].Select(m => Convert.ToInt32(m.ToString())).ToList(); var qian = bets[1].Select(m => Convert.ToInt32(m.ToString())).ToList(); var bai = bets[2].Select(m => Convert.ToInt32(m.ToString())).ToList(); var shi = bets[3].Select(m => Convert.ToInt32(m.ToString())).ToList(); var ge = bets[4].Select(m => Convert.ToInt32(m.ToString())).ToList(); list = (from w in wan from q in qian from b in bai from s in shi from g in ge select string.Format("{0}{1}{2}{3}{4}", w, q, b, s, g)).ToList(); return list; } } }
计算总注数:
在组合的基础上*5即为5星组合的注数;
计算中奖情况:
/// <summary> /// 开奖的时候 计算中奖情况 /// </summary> /// <param name="issueCode"></param> /// <param name="openResult"></param> /// <param name="item"></param> protected override void IssueCalculate(string issueCode, string openResult, BasicModel.LotteryBasic.BetDetail item) { //得到所有可能 var list = GetAllBets(item); var result = openResult.Replace(",", ""); decimal _1Monery = 0m; decimal _2Monery = 0m; decimal _3Monery = 0m; decimal _4Monery = 0m; decimal _5Monery = 0m; list.ForEach(m => { //需要判断中五位/四位/三位/二位/1位,奖金不一样 decimal stepAmt = 0; if (m == result && _5Monery==0)//中五位,五星 { //2 item.BonusLevel == 1700 ? 170000 : 180000 _5Monery += TotalWinMoney(item, GetBaseAmtLstItem(5, item, ref stepAmt), stepAmt, 1); } if (m.Remove(0, 1) == result.Substring(1, 4) && _4Monery==0)//中四位,四星 { // item.BonusLevel == 1700 ? 17000 : 18000 _4Monery += TotalWinMoney(item, GetBaseAmtLstItem(4, item, ref stepAmt), stepAmt, 1); } if (m.Remove(0, 2) == result.Substring(2, 3) && _3Monery == 0)//中三位,三星 { // item.BonusLevel == 1700 ? 1700 : 1800 _3Monery += TotalWinMoney(item, GetBaseAmtLstItem(3, item, ref stepAmt), stepAmt, 1); } if (m.Remove(0, 3) == result.Substring(3, 2) && _2Monery==0)//中二位,二星 { // item.BonusLevel == 1700 ? 170 : 180 _2Monery += TotalWinMoney(item, GetBaseAmtLstItem(2, item, ref stepAmt), stepAmt, 1); } if (m.Remove(0, 4) == result.Substring(4, 1) && _1Monery==0)//中一位,一星 { //item.BonusLevel == 1700 ? 17 : 18 _1Monery += TotalWinMoney(item, GetBaseAmtLstItem(1, item, ref stepAmt), stepAmt, 1); } }); item.WinMoney = _1Monery + _2Monery + _3Monery + _4Monery + _5Monery; if (item.WinMoney > 0) item.IsMatch = true; }
总结:五星组合和五星直选复式的逻辑基本一样,区别就是组合可以中五星、四星、三星、二星和一星;
有需要的大家可以加群一起讨论:542620409(技术交流)