让x, range, d
为整数。我们希望产生一批y
,这样生成一个足够远离另一个数的随机数
- 我想出了是
1 <= y <= range
abs(x-y) >= d
一个想法产生了一些较小的范围内,然后做一些调整来处理数字这太接近x
。但那真是太乏味了。
有没有更好的方法来做到这一点?
让x, range, d
为整数。我们希望产生一批y
,这样生成一个足够远离另一个数的随机数
1 <= y <= range
abs(x-y) >= d
一个想法产生了一些较小的范围内,然后做一些调整来处理数字这太接近x
。但那真是太乏味了。
有没有更好的方法来做到这一点?
这里是一个Python函数,你应该能够适应您所选择的语言:
import random
def distantRand(a,b,x,d):
#returns a random integer in range a ... b
#which is greater than or equal to d units from x
lb = max(a,x-d+1)
ub = min(b,x+d-1)
k = ub-lb+1 #number of numbers ruled out
if b-k < a:
return None
else:
y = random.randint(a,b-k)
if y > x - d:
y = y + k
return y
例如,distantRand(1,10,5,3)
应该取值范围为1回至10的数至少是单位处从5.这排除了3,4,5,6,7作为返回值,留下10-5 = 5有效数字。该函数在1到5的范围内选择一个。如果选择的数字> 2,则添加5以使其数值大于7(但仍为< = 10)。例如:
>>> for i in range(20):
print(distantRand(1,10,5,3))
1
1
1
8
2
9
10
8
1
10
10
2
8
10
8
8
8
2
1
2
'x-d'可能是负数,例如'distantRand(1,10,2,4)' – marmistrz
@marmistrz好点。我更关心我如何计算'k'。 –
我已经在Python中这样做了。
import random
range=100
d=20
x=115
while(True):
y=random.randint(1,range)
if abs(x-y)>=d:
print abs(x-y)
print y
break
这里,它是作为高清
import random
r=100
d=20
x=115
def yourandom (x,d,r):
while(True):
y=random.randint(1,r)
if abs(x-y)>=d:
print "abs(x-y)=",abs(x-y)
print "y=",y
break
yourandom(x,d,r)
会带你想要的距离'D',然后添加随机数它是一种选择?这样'd + y'将是随机的,并且总是在想要的距离。 –