当前位置:  开发笔记 > 编程语言 > 正文

除一个数字之外的某个范围内的随机整数

如何解决《除一个数字之外的某个范围内的随机整数》经验,为你挑选了1个好方法。

我想在一个范围内得到一个随机数,不包括一个数字(例如从1到1000不包括577).我搜索了一个解决方案,但从未解决过我的问题.

我想要的东西:

Math.floor((Math.random() * 1000) + 1).exclude(577);

我想避免for循环创建一个尽可能多的数组,因为长度总是不同的(有时1到10000,有时是685到888555444等),生成它的过程可能需要太多时间.

我已经尝试过:

Javascript - 生成范围中的随机数,不包括某些数字

如何在一个范围内生成一个随机数但排除一些?

我怎么能实现这个目标?



1> Marco Bonell..:

获取某个范围内的随机整数[a, b](不包括一个值)的最快方法c是在a和之间生成它b-1,然后如果它高于或等于,则将其递增1 c.

这是一个工作功能:

function randomExcluded(min, max, excluded) {
    var n = Math.floor(Math.random() * (max-min) + min);
    if (n >= excluded) n++;
    return n;
}

该解决方案仅具有O(1)的复杂性.


@ P.Frank这就是诀窍!例如假设您希望它从1到10,但不是5.您从1到9生成它,然后,如果它高于或等于5,则添加1.执行此操作您只能获得[1,2, 3,4,6,7,8,9,10],这就是你想要的.所有数字都具有相同的生成概率,并且永远不会生成5.
**显然这是正确的答案.令人难以置信的是,在专业的编程网站上,任何人都提出了其他建议.真是笑话.**
推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有