惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
V
V2EX
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
小众软件
小众软件
Vercel News
Vercel News
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
V
Visual Studio Blog
J
Java Code Geeks
P
Proofpoint News Feed
MongoDB | Blog
MongoDB | Blog
B
Blog
美团技术团队
量子位

博客园 - zhengguoqing

新LIMS建设全流程深度调研与实践指南 程序员福利各大平台免费接口非常适用 .netCore调用WebService DotNet 资源大全中文版(Awesome最新版) RAR去除广告 用户能够在下次登录系统时被重新配置---或win10早期更新不成功的bug就需要删除多余的登陆用户 Nuget C#操作Access 简体繁体转换JS(JavaScript)脚本 Google搜索技巧 我的Visual Studio sqlserver获取字段信息 win7取得管理员的权限运行软件 SQL jqModal MSDN资源 Microsoft Security Essentials 不升级方法 office2003安全模式启动,默认模板问题/打开word就显示“无法装载这个对象” SQL Server 2005 集成sp2的 企业版安装后没发现 Management Studio管理工具
已知多个奖品概率,取奖品
zhengguoqing · 2013-02-02 · via 博客园 - zhengguoqing

两种方法: 

1、 定义一个最大区间,如100000,新建一个区间数组,如a[10,110,1110,100000],然后出0~100000的随机数,在哪个区间就是哪个。 注意:区间的差值/最大上限=目标概率    (要判断是哪个区间,只要for循环一下取第一个 a[i]<[随机数i+1 即可)

2、 定义一个大数组,如a[100000],按照概率往里填充目标值,如a[1,1,1, …… 2,2,…… ,5,……],然后打乱(随你怎么打乱都行),再出0~99999的随机数n,取a[n]即可。 注意:所有概率和必须等于1,不要漏掉你不必控制出现 未中奖” 的概率。

第一种方式实现:

        public static int getRandomNum(int[] arr, int[] probablility)
        {
            if (arr.Length!=probablility.Length)
            {
                return -1;
            }
            Random ran =new Random();
            int ran_num = ran.Next(10000);
            int temp = 0;
            for (int i = 0; i < arr.Length; i++)
            {
                temp += probablility[i];
                if (ran_num<temp)
                {
                    return arr[i];
                }
            }
            return -1;
        }

            for (int i = 0; i < 100000; i++)
            {
                Console.Write(getRandomNum(new int[] { 0, 1, 2, 3, 4, 5 }, new int[] { 7878, 1000, 100, 20, 1000, 2 }));
            }