zoukankan      html  css  js  c++  java
  • 已知多个奖品概率,取奖品

    两种方法: 

    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 }));
                }

  • 相关阅读:
    使用knockout.js 完毕template binding
    站点建设价格为什么有高有低?站点建设该怎样选择?
    同余 模算术 中国剩余定理
    linux 命令之 apt-get
    [Leetcode]-Reverse Integer
    《Python入门》Windows 7下Python Web开发环境搭建笔记
    javascript之Ajax起步
    SQL server 2012 安装SQL2012出现报错: 启用 Windows 功能 NetFx3 时出错
    C# 反射具体解释
    java8_api_jni
  • 原文地址:https://www.cnblogs.com/ZhengGuoQing/p/2890270.html
Copyright © 2011-2022 走看看