zoukankan      html  css  js  c++  java
  • JS生成限定整数区间范围内的随机整数

    对于整数区间获取随机整数:

    m,n均为整数,且n>m。

    获取[m,n)区间内的随机整数:

    1 var aNumber = (n - m) * Math.random() + m;
    2 var result = Math.floor(aNumber);

    获取获取[m,n]区间内的随机整数:

    1 var aNumber = (n+1- m) * Math.random() + m;
    2 var result = Math.floor(aNumber);

    获取对于区间(m,n)的随机整数,JS代码:

    1 var aNumber = (n-1- m) * Math.random() + (m+1);
    2 var result = Math.floor(aNumber);

    获取获取(m,n]区间内的随机整数:

    1 var aNumber = (n- m) * Math.random() + (m+1);
    2 var result = Math.floor(aNumber);

    推导过程:

    Math.random()的值为数学上的半开半闭区间[0,1),即0≤Math.random()<1。在JS中生成限定范围内的随机整数其实也是基于Math.random()来操作实现的随机整数。

    1、通过Math.random()获取[0,10)之间的随机整数。

    1 var aNumber = 10 * Math.random();
    2 var result = Math.floor(aNumber);

    aNumber的值在[0,1)区间取值为0,依次类推到[9,10)区间取值为9,每个区间长度值一样,所代表的数同样多,aNumber在每个区间内的概率相同。

    先看几个类似的随机整数的试题:

    1、JS随机生成[20,50)区间内的随机整数;

    2、JS随机生成[20,50]区间内的随机整数;

    3、JS随机生成(20,50)区间内的随机整数;

    4、JS随机生成(20,50]区间内的随机整数。

    先转换为数学问题(需要基础的初中数学代数知识)

    为书写方便,我们令α=Math.random(),0≤α<1,K代表生成区间内的随机整数。

    1、JS随机生成[20,50)区间内的随机整数。

    20≤K<50

    化简:

    0≤K-20<30

    0≤(K-20)/30<1

    即(K-20)/30=α

    K=30α+20

    由于α是[0,1)的随机数,30α+20还不满足要求,需要整数,对K进行向下取整操作:Math.floor(K)

    转换为JS代码:

    1 var aNumber=(50-20)*Math.random()+20 ;
    3 var result= Math.floor(aNumber);

    推广到一般情况下,对于正整数区间[m,n)的随机整数,JS代码:

    var aNumber = (n - m) * Math.random() + m;
    var result = Math.floor(aNumber);

    2、JS随机生成[20,50]区间内的随机整数;

    与“JS采用随机生成[20,50)区间内的随机整数”相比,就是一个需要取末尾闭区间,随机整数要可以取50。

    等效于JS采用Math.floor()随机生成[20,50+1]区间内的随机整数;

    推广到一般情况下,对于区间[m,n]的随机整数,JS代码:

    1 var aNumber = (n+1 - m) * Math.random() + m;
    2 var result = Math.floor(aNumber);

    思考:采取下列方式似乎同样可以获得[20,50]的随机整数,这么做会有什么问题?

    1 var aNumber = (50 - 20) * Math.random() + 20;
    2 var result = Math.round(aNumber);

    即对[20,50)区间内的随机数进行四舍五入的操作,同样可以实现K的取值范围为[20,50],这样做会产生什么问题?

    3、JS采用Math.floor()随机生成(20,50)区间内的随机整数;

    等效于JS采用Math.floor()随机生成[21,50)区间内的随机整数;

    推广到一般情况下,对于区间(m,n)的随机整数,JS代码:

    1 var aNumber = (n-1 - m) * Math.random() + (m+1);
    2 var result = Math.floor(aNumber);

    4、JS采用Math.floor()随机生成(20,50]区间内的随机整数。

    等效于JS采用Math.floor()随机生成[21,51)区间内的随机整数;

    推广到一般情况下,对于区间(m,n]的随机整数,JS代码:

    1 var aNumber = (n - m) * Math.random() + m+1;
    2 var result = Math.floor(aNumber);

    思考:采用Math.ceil()与Math.random()实现上述随机整数可能产生什么问题? 如果不明白可以到下方留言哦。

  • 相关阅读:
    Python3.7.1学习(六)RabbitMQ在Windows环境下的安装
    使用jmeter进行简单的压测
    python中mock的使用
    python-shutil模块
    python-常用模块之os、sys
    python-冒泡排序
    python-正则基础
    python-二维数组实现90度旋转
    python-使用递归实现二分法
    python-递归的实现
  • 原文地址:https://www.cnblogs.com/f6056/p/13362504.html
Copyright © 2011-2022 走看看