摘自网络

static void Main(string[] args)
{
//各物品的概率保存在数组里
float[] area = new float[4]{
0.5f,
0.5f,
0,
0
}; //单次测试
//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);
}
Console.ReadLine();
} /// <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 = new Random();
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;
}

最新文章

  1. Map的性能
  2. excel查看VBA代码快捷键
  3. asp.net 微信企业号办公系统-流程设计--保存与发布
  4. IOS深入学习(19)之View object
  5. Fragment实现底部Tab,切换可保存状态
  6. WPF 如何缓解大量控件加载缓慢的问题
  7. 36.java_exception_test
  8. ●BZOJ 2002 [Hnoi2010]Bounce 弹飞绵羊
  9. Java基础 -- 深入理解Java异常机制
  10. Swagger Edit 安装和使用教程
  11. CSS 实现左侧固定,右侧自适应两栏布局的方法
  12. 吴恩达机器学习笔记14-逻辑回归(Logistic Regression)
  13. pytorch bug: for step,data in enumerate(loader)+Connection reset by peer
  14. Android为TV端助力 帧动画
  15. MySQL数据库基本用法
  16. ldap禁止匿名用户登录
  17. moveTaskToback退后台的用法及作用
  18. [SimpleOJ238]宝藏探寻
  19. feather mac 问题小结
  20. python全栈开发之OS模块的总结

热门文章

  1. JavaScript初步学习----基本使用,简单事件,修改样式,数据类型
  2. CODEVS1187 Xor最大路径 (Trie树)
  3. [bzoj1010][HNOI2008]玩具装箱toy_斜率优化dp
  4. Retrofit网络框架入门使用
  5. 臣妾做不到啊---记团队内首次尝试HOLACRACY管理会议
  6. Android学习之6.0系统执行时权限设置
  7. 解决Android 应用方法数不能超过65K的问题
  8. 南昌互联网行业协会筹办者祝真和华罡团队-2014年12月江西IDC排行榜
  9. 飘逸的python - 极简的二叉树前中后序通杀函数
  10. 编程算法 - 和为s的连续正整数序列 代码(C)