zoukankan      html  css  js  c++  java
  • js控制随机数生成概率代码实例

    基本思路:把Math.random()js随机数生成的数看着百分比,然后定义每个整数值取值范围。

    具体内容如下,供大家参考

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    'use strict';
    export default class GL {
      /**
       * 构造函数
       * @param {object} opt
       * @param {number} opt.min 最小整数值
       * @param {number} opt.max 最大整数值
       * @param {Map} opt.fenpei 自定义概率
       */
      constructor({ min, max, fenpei = new Map() }) {
        this.min = min;
        this.max = max;
        this.fenpei = fenpei;
      }
     
      /**
       * 可分配百分比
       */
      get baifenbi() {
        return (1 - this.peizhi) / (this.max - this.min - this.fenpei.size);
      }
     
      /**
       * 配置
       */
      get peizhi() {
        let result = 0;
        for (let i of this.fenpei.values()) {
          if (this.min <= i && i < this.max) result += i;
        }
        return result;
      }
     
     
      /**
       * 随机数
       * @returns {number} [min,max)
       */
      random() {
        let t = 0, r = Math.random();
        for (let i = this.min; i < this.max; i++) {
          this.fenpei.has(i) ? t += this.fenpei.get(i) : t += this.baifenbi;
          if (t > r) return i;
        }
        return null;
      }
    }
     
     
    let d = new GL({
      min: 0,
      max: 8,
      fenpei: new Map([
        [0, 0.5], // 数值,百分比
        [22, 0.4]
      ])
    });
     
    // 测试
    let count = Array(10).fill(0);
    for (let i = 0; i < 10000; i++) {
      count[d.random()] += 1;
     
    }
     
    for (let i = 0; i < count.length; i++) {
      console.log(count[i] / 10000);
    }
  • 相关阅读:
    函数进阶:闭包、装饰器、列表生成式、生成器、迭代器
    函数基础:内置函数
    Python函数基础---参数、变量
    python函数基础:嵌套函数、作用域、匿名函数、高阶函数、递归函数
    三元运算、文件操作
    Python终端如何输出彩色字体
    文件处理: read、readline、 readlines()
    16进制、编码问题
    JSON 操作与转化
    高并发和大型网站架构相关
  • 原文地址:https://www.cnblogs.com/good10000/p/10583345.html
Copyright © 2011-2022 走看看