日期:2014-05-17  浏览次数:20847 次

如何精确的控制抽奖概率为1/2
如题,我现在需要一个抽奖,必须控制概率为1/2,当然,有前置条件的,所以不要问为什么要1/2这么高的概率了~~~

我使用的方法是使用随机函数Random的Next(2),并且使用RNGCryptoServiceProvider的GetBytes方法获得种子值,但是BOSS还是说概率有问题,感觉出现较小值的概率高,有没有更完美的方法~~~

        /// <summary>
        /// 根据获取抽到的奖品
        /// </summary>
        /// <param name="lotteryRules"></param>
        /// <returns></returns>
        public int GetLotteryPoints(int oldPoints)
        {
            Random random = new Random(GetRandomSeed());

            int m = random.Next(2);

            if (m == 1)
            {
                return this.MinAward;
            }
            else
            {
                return this.MaxAward;
            }
        }

        /// <summary>
        /// 获取随机种子值,防止连续快速取随机数重复问题
        /// </summary>
        /// <returns></returns>
        public static int GetRandomSeed()
        {
            byte[] bytes = new byte[4];
            System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
            rng.GetBytes(bytes);
            return BitConverter.ToInt32(bytes, 0);
        }