首页 > 其他 > 详细

概率抽奖

时间:2017-04-13 10:17:00      阅读:116      评论:0      收藏:0      [点我收藏+]
[TestMethod]
public void CheckTrue()
{
var reg = CommonTools.CheckTrue(1.001M);
}
 
/// <summary>
/// 根据中奖率判断是否中奖
/// </summary>
/// <param name="percent">中奖率(0~100)</param>
/// <returns></returns>
public static bool CheckTrue(decimal percent)
{
bool result = false;
if (percent >= 100)
{
result = true;
}
else if (percent <= 0)
{
result = false;
}
else
{
string strPercent = percent.ToString();
int rndCount = 0;//随机数个数
int rndMax = 0;//随机数最大值
int rand = 0;//抽中数
if (strPercent.IndexOf(‘.‘) == -1)//无小数位
{
rndMax = 100;
rndCount = (int)percent;
var rndList = GenerateRandom(rndMax, rndCount,false);
rand = rnd.Next(rndMax);
result = rndList.Contains(rand);
}
else
{
int accCount = strPercent.Length - strPercent.IndexOf(‘.‘)-1;
//rndMax= percent>=1? (int)Math.Pow(10, strPercent.Length+1): (int)Math.Pow(10, accCount+1);
rndMax = (int)Math.Pow(10, accCount + 2);
rndCount = (int)(percent * (int)Math.Pow(10, accCount));
var rndList = GenerateRandom(rndMax, rndCount, false);
rand = rnd.Next(rndMax);
result = rndList.Contains(rand);
}
}
return result;
}
 
public static List<int> GenerateRandom(int iMax, int iNum,bool isRepeat=true)
{
long lTick = DateTime.Now.Ticks;
List<int> lstRet = new List<int>();
for (int i = 0; i < iNum; i++)
{
Random ran = new Random((int)lTick * i);
int iTmp = ran.Next(iMax);
if (!isRepeat)
{
if (lstRet.Contains(iTmp))
{
i--;
lTick += (new Random((int)lTick).Next(978));
continue;
}
}
lstRet.Add(iTmp);
lTick += (new Random((int)lTick).Next(978));
}
return lstRet;
}

概率抽奖

原文:http://www.cnblogs.com/maodan/p/6702497.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!