zoukankan      html  css  js  c++  java
  • 五星组合

    五星组合,最多可以中五注,如上图投注内容为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(技术交流)

      

  • 相关阅读:
    test
    结构体内存对齐
    单链表(指针的指针应用)
    C语言实现线程池
    线程私有数据和pthread_once
    fcntl函数
    同构树
    动态规划经典题
    DP--方格取数问题
    动态规划的基本模型
  • 原文地址:https://www.cnblogs.com/heqinghua/p/5475603.html
Copyright © 2011-2022 走看看