标签:抽奖 C# float 指定 int 概率 result prob 1000
原文链接:http://www.cnblogs.com/linji/p/3976305.htmlstatic void Main(string[] args) { //各物品的概率保存在数组里 float[] area = new float[4]{ 0.980f, 0.550f, 0.230f, 0.010f }; //单次测试 //Console.WriteLine(Get(area)); //批量测试 int[] result = new int[4]{ 0, 0, 0, 0 }; for (int i = 0; i < 1770000; i++) //为了比对结果方便,这里循环的次数是总概率的1000倍 { int n = Get(area); //本次抽奖结果 result[n]++; //统计抽到的次数 } Console.WriteLine("结果:"); foreach (int times in result) { Console.WriteLine(times); } } /// <summary> /// 获取抽奖结果 /// </summary> /// <param name="prob">各物品的抽中概率</param> /// <returns>返回抽中的物品所在数组的位置</returns> private static int Get(float[] prob) { int result = 0; int n = (int)(prob.Sum() * 1000); //计算概率总和,放大1000倍 Random r = rnd; float x = (float)r.Next(0, n) / 1000; //随机生成0~概率总和的数字 for (int i = 0; i < prob.Count(); i++) { float pre = prob.Take(i).Sum(); //区间下界 float next = prob.Take(i + 1).Sum(); //区间上界 if (x >= pre && x < next) //如果在该区间范围内,就返回结果退出循环 { result = i; break; } } return result; } private static Random rnd = new Random();
转载于:https://www.cnblogs.com/linji/p/3976305.html
标签:抽奖,C#,float,指定,int,概率,result,prob,1000 来源: https://blog.csdn.net/weixin_30699235/article/details/97242494
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。