编程:随机数1-10之间,但是要去除某一位数

Random() * 10 + 1 产生随机数
写一个函数 Rnd(1 , 10) ,但是不能出现3,如何做才是最优的。代码
Rnd( a, b, c ) === c就是要去除的数字。

随机一个范围内的数字,但是不包含某一个数? 请问有什么办法?

一开始我是直接随机,然后判断是否一样,如果一样,再递归调用,直到不一样才返回。但是有时候会比较慢, 比如1-5随机,去除2,就会很慢。

最好的代码
...
如果我要随机 1 到 1万呢? 去除数字888 ?

不需要递归,使用一个循环就可以了,随机到需要去除的数,继续再随机,直至随机到不是需要删除的数,这要比使用递归节省空间。范围越小随机到需要去除的数的机率越大,范围越大随机到需要去除的数的机率越小。随机数是不可预测的,这种方式,优化方法有限。
另一种方式比较简单,就是遇到需要去除的数,加上或者减去一个数,可以使其避开需要去除的数。这种方式也是最好的。追问

也是啊,递归占用太多空间。。。
但是这样随机到一样的数,再次循环随机,对于范围小的会不好,比如1到3,去除2。会出现大量循环随机。
我想到的是: 1到10,去除7 。 就用1-6 ,8-10来随机,先随机一个数50%,选择前段还是后段,再来随机前段1-6 ,后段8-10 。但是这样会不公平。 假如按百分比来选择,前段70%后段30% 。这样选一开始就偏向前段了。

追答

这个担心其实没必要,一个随机数加减乘除一个数还是随机数,无所谓公平不公平。

追问

不好。 程序员就是要把所有可能的事,都得思考一遍。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-12-01
直接一个数组arr[8],分别是1 2 4 5 6 7 8 9 10,然后你随机0-8,结果为rnd
取arr[rnd]值就好
搞什么递归
相似回答