抽奖概率算法

        CSI_Riddle riddle = new CSI_Riddle();
        CSI_RiddleAnswer answer = new CSI_RiddleAnswer();
        CSI_Luckdraw luckdraw = new CSI_Luckdraw();
        static Random Rnd = new Random();
        PointLog pointLog = new PointLog();//积分日志

        User user = new User();

        protected void Page_Load(object sender, EventArgs e)
        {
            //Query query = new Query();
            //query.AddAndFilter("AccountId={0}", CurrentAccount.Id);//此表保存的是AccountId
            //user = UserService.Find(query);//总积分表

            int Count = answer.GetCount(" IsTrue=1 and U_ID=" + CurrentAccount.UserId);//答对灯谜数
            int Num = luckdraw.GetCount(" U_ID=" + CurrentAccount.UserId);  //抽奖次数

            Result resul = new Result();
            JavaScriptSerializer jss = new JavaScriptSerializer();

            #region
            if (DateTime.Now >= DateTime.Parse("2014-02-24 12:00:00"))//抽台历
            {
                //转盘 Turntable
                List<Prize> Turntable = new List<Prize>{
                        new Prize{ LuckDrowName="0", Chance=25},
                        new Prize{ LuckDrowName="2500", Chance=75}};
                //是否答对全部所有灯谜,并且台历抽奖开启后是否抽过奖
                if (answer.GetCount(" IsTrue=1 and U_ID=" + CurrentAccount.UserId) == riddle.GetCount("") && luckdraw.GetCount(" CreateDate>='2014-02-24 12:00:00' and U_ID=" + CurrentAccount.UserId) <= 0)
                {
                    int TrueCount = luckdraw.GetCount(" Result=0");//中到台历个数
                    if (TrueCount >= 5)//后五个随机
                    {
                        if (TrueCount >= 10)//达到10个后不会抽到台历
                        {
                            resul.Prize = "2500";
                            resul.Angle = AngleNum("2500");

                            luckdraw.Result = 2500;
                            luckdraw.U_ID = CurrentAccount.UserId;
                            luckdraw.CreateDate = DateTime.Now;
                            luckdraw.Add(luckdraw);
                        }
                        else //随机抽五个
                        {

                            resul.Prize = name(Turntable);
                            resul.Angle = AngleNum(resul.Prize);

                            luckdraw.Result = int.Parse(resul.Prize);
                            luckdraw.U_ID = CurrentAccount.UserId;
                            luckdraw.CreateDate = DateTime.Now;
                            luckdraw.Add(luckdraw);
                        }
                    }
                    else //前五个
                    {
                        resul.Prize = "0";
                        resul.Angle = AngleNum("0");//2月24日12点至2月24日23:59

                        luckdraw.Result = 0;
                        luckdraw.U_ID = CurrentAccount.UserId;
                        luckdraw.CreateDate = DateTime.Now;
                        luckdraw.Add(luckdraw);
                    }
                }

            }
            #endregion
            else
            {
                if ((Count - Num) > 0)//是否可以抽奖
                {
                    //转盘 Turntable
                    List<Prize> Turntable = new List<Prize>{
                     new Prize{ LuckDrowName="500", Chance=60},
                     new Prize{ LuckDrowName="1000", Chance=17},
                     new Prize{ LuckDrowName="1500", Chance=17},
                     new Prize{ LuckDrowName="2500", Chance=6}};
                    if (DateTime.Now >= DateTime.Parse("2014-02-24 00:00:00"))
                    {
                        resul.Prize = "-1";//没有抽奖机会
                        resul.Angle = 0;
                    }
                    else
                    {

                        resul.Prize = name(Turntable);
                        resul.Angle = AngleNum(resul.Prize);

                        luckdraw.Result = int.Parse(resul.Prize);
                        luckdraw.U_ID = CurrentAccount.UserId;
                        luckdraw.CreateDate = DateTime.Now;
                        luckdraw.Add(luckdraw);
                    }
                }
                else
                {
                    resul.Prize = "-1";//没有抽奖机会
                    resul.Angle = 0;
                }
            }
            if (resul.Prize != "-1" && resul.Prize != "0" && resul.Prize!=null)
            {

                try
                {
                    pointLog.Point = int.Parse(resul.Prize);//分数
                    pointLog.UserId = CurrentAccount.UserId;
                    pointLog.PointRuleId = 0;//猜灯谜
                    pointLog.RemarkId = 0;
                    pointLog.OperatorId = CurrentAccount.UserId;
                    pointLog.CreateDate = DateTime.Now;
                    PointLogService.Create(pointLog);//加入日志

                    CSI_iknowUser iknowuser = new CSI_iknowUser();
                    object ik = iknowuser.ConvertToModel(iknowuser.GetFieldList(" top 1 *", "AccountId=" + CurrentAccount.UserId).Rows[0]);
                    //iknowuser = iknowuser.ConvertToModel(iknowuser.GetList(" AccountId=" + CurrentAccount.UserId).Tables[0].Rows[0]);
                    //if (iknowuser == null)
                    //{
                    //    iknowuser = iknowuser.ConvertToModel(iknowuser.GetList(" AccountId=" + CurrentAccount.Id).Tables[0].Rows[0]);
                    //}
                    if (ik != null)
                    {
                        iknowuser = (CSI_iknowUser)ik;
                        iknowuser.Point += int.Parse(resul.Prize);
                        iknowuser.Update(iknowuser);//加入总积分
                    }

                }
                catch
                {
                   // luckdraw.DeleteUserID(CurrentAccount.UserId);//删除抽奖
                    resul.Prize = "-2";//出问题了
                    resul.Angle = 0;
                }
            }

            Response.Write(jss.Serialize(resul));
            Response.End();

        }

 

        //计算概率
        private Prize LuckDrow(List<Prize> Turntable)
        {
            return (from x in Enumerable.Range(0, 1000000)  //最多支100万次骰子
                    let Prize = Turntable[Rnd.Next(Turntable.Count())]
                    let Sieve = Rnd.Next(0, 100)
                    where Sieve < Prize.Chance
                    select Prize).First();
        }

        //获取中奖奖品名称
        protected string name(List<Prize> Turntable)
        {
            return LuckDrow(Turntable).LuckDrowName;
        }

        //获取转盘的角度
        protected int AngleNum(string LuckDrowName)
        {
            bool flage = true;
            Random rod = new Random();
            int Angle = 0;

            //360度 分成九份  每份40度
            int[,] arrayList = new int[9, 2] { { 0, 39 }, { 40, 79 }, { 80, 119 }, { 120, 159 }, { 160, 199 }, { 200, 239 }, { 240, 279 }, { 280, 319 }, { 320, 359 } };//定义二维数

            switch (LuckDrowName)
            {
                case "500":
                    while (flage)
                    {
                        Angle = rod.Next(360);
                        if ((arrayList[1, 0] <= Angle && Angle <= arrayList[1, 1]) || (arrayList[3, 0] <= Angle && Angle <= arrayList[3, 1]) || (arrayList[6, 0] <= Angle && Angle <= arrayList[6, 1]) || (arrayList[8, 0] <= Angle && Angle <= arrayList[8, 1]))
                        {
                            flage = false;
                        }
                    }
                    break;
                case "1000":
                    while (flage)
                    {
                        Angle = rod.Next(360);
                        if (arrayList[7, 0] <= Angle && Angle <= arrayList[7, 1])
                        {
                            flage = false;
                        }
                    }
                    break;
                case "1500":
                    while (flage)
                    {
                        Angle = rod.Next(360);
                        if (arrayList[0, 0] <= Angle && Angle <= arrayList[0, 1])
                        {
                            flage = false;
                        }
                    }
                    break;
                case "2500":
                    while (flage)
                    {
                        Angle = rod.Next(360);
                        if (arrayList[2, 0] <= Angle && Angle <= arrayList[2, 1])
                        {
                            flage = false;
                        }
                    }
                    break;
                default:
                    while (flage)
                    {
                        Angle = rod.Next(360);
                        if ((arrayList[4, 0] <= Angle && Angle <= arrayList[4, 1]) || (arrayList[5, 0] <= Angle && Angle <= arrayList[5, 1]))
                        {
                            flage = false;
                        }
                    }
                    break;
            }
            return Angle;
        }

    }

    public class Prize //奖品
    {
        /// <summary>
        /// 奖品名称
        /// </summary>
        public string LuckDrowName;

        /// <summary>
        /// 概率
        /// </summary>
        public int Chance;
    }

    public class Result //结果
    {
        #region
        private int _angle;
        private string _prize;

        /// <summary>
        /// 角度
        /// </summary>
        public int Angle
        {
            set { _angle = value; }
            get { return _angle; }
        }
        /// <summary>
        /// 奖项
        /// </summary>
        public string Prize
        {
            set { _prize = value; }
            get { return _prize; }
        }
        #endregion Model
    }

 

转载于:https://www.cnblogs.com/wwy224y/p/3533269.html

当前,全球经济格局深刻调整,数字化浪潮席卷各行各业,智能物流作为现代物流发展的必然趋势和关键支撑,正迎来前所未有的发展机遇。以人工智能、物联网、大数据、云计算、区块链等前沿信息技术的快速迭代与深度融合为驱动,智能物流不再是传统物流的简单技术叠加,而是正在经历一场从自动化向智能化、从被动响应向主动预测、从信息孤岛向全面互联的深刻变革。展望2025年,智能物流系统将不再局限于提升效率、降低成本的基本目标,而是要构建一个感知更全面、决策更精准、执行更高效、协同更顺畅的智慧运行体系。这要求我们必须超越传统思维定式,以系统化、前瞻性的视角,全面规划和实施智能物流系统的建设。本实施方案正是基于对行业发展趋势的深刻洞察和对未来需求的精准把握而制定。我们的核心目标在于:通过构建一个集成了先进感知技术、大数据分析引擎、智能决策算法和高效协同平台的综合智能物流系统,实现物流全链路的可视化、透明化和智能化管理。这不仅是技术层面的革新,更是管理模式和服务能力的全面提升。本方案旨在明确系统建设的战略方向、关键任务、技术路径和实施步骤,确保通过系统化部署,有效应对日益复杂的供应链环境,提升整体物流韧性,优化资源配置效率,降低运营成本,并最终为客户创造更卓越的价值体验。我们致力于通过本方案的实施,引领智能物流迈向更高水平,为构建现代化经济体系、推动高质量发展提供强有力的物流保障。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值