.net 指定奖品概率随机抽奖功能实现

来源:互联网 发布:淘宝女打底衫 编辑:程序博客网 时间:2024/05/20 19:33

class Program
    {
        static void Main(string[] args)
        {
            int code1 = 0, code2 = 0, code3 = 0, code4 = 0, code5 = 0, code6 = 0, code7 = 0, code8 = 0, other = 0;

            for (int i = 0; i <30000; i++)
            {
                Enumerable.Range(1, 1).ToList().ForEach(x =>
                {
                    string name = Run(list).name;
                    if (name == "Goods1")
                    {
                        code1++;
                    }
                    else if (name == "Goods2")
                    {
                        code2++;
                    }
                    else if (name == "Goods3")
                    {
                        code3++;
                    }
                    else if (name == "Goods4")
                    {
                        code4++;
                    }
                    else if (name == "Goods5")
                    {
                        code5++;
                    }
                    else if (name == "Goods6")
                    {
                        code6++;
                    }
                    else if (name == "Goods7")
                    {
                        code7++;
                    }
                    else if (name == "Goods8")
                    {
                        code8++;
                    }
                    else
                    {
                        other++;
                    }
                });
            }

            Console.WriteLine("code1:" + code1);
            Console.WriteLine("code2:" + code2);
            Console.WriteLine("code3:" + code3);
            Console.WriteLine("code4:" + code4);
            Console.WriteLine("code5:" + code5);
            Console.WriteLine("code6:" + code6);
            Console.WriteLine("code7:" + code7);
            Console.WriteLine("code8:" + code8);
            Console.WriteLine("other:" + other);
            Console.WriteLine("总次数:" + (code1 + code2 + code3 + code4 + code5 + code6 + code7 + code8 + other));
        }


         private static Random Rnd = new Random();

         //奖品列表
        private static List<Goods> list = new List<Goods> {
            new Goods(){id=1,name="Goods1",code="code1",percent=0.049},
            new Goods(){id=2,name="Goods2",code="code2",percent=0.14},
            new Goods(){id=3,name="Goods3",code="code3",percent=0.001},
            new Goods(){id=4,name="Goods4",code="code4",percent=0.0001},
            new Goods(){id=5,name="Goods5",code="code5",percent=0.15},
            new Goods(){id=6,name="Goods6",code="code6",percent=0.25},
            new Goods(){id=7,name="Goods7",code="code7",percent=0.20},
            new Goods(){id=8,name="Goods8",code="code8",percent=0.20},
        };

        //根据概率随机产生奖品
        private static Goods Run(List<Goods> list)
        {
            return (from x in Enumerable.Range(0, 1000000)
                    let p = list[Rnd.Next(list.Count())]
                    let q = Rnd.NextDouble()
                    where q < p.percent
                    select p).First();       

        }
 }

 

    /// <summary>
    /// 奖品实体
    /// </summary>
    class Goods
    {
        /// <summary>
        /// 奖品id
        /// </summary>
        public int id { set; get; }
        /// <summary>
        /// 奖品代码
        /// </summary>
        public string code { set; get; }
        /// <summary>
        /// 奖品名称
        /// </summary>
        public string name { set; get; }
        /// <summary>
        /// 概率

        /// </summary>
        public double percent { set; get; }
        public string ToString()
        {
            return string.Format("id:{0},code:{1},name:{2},percent:{3}", this.id, this.code, this.name, this.percent);
        }
    }

 

原创粉丝点击