让x, range, d
为整数。我们想要生成一个y
数字,以便
1 <= y <= range
abs(x-y) >= d
我想出的一个想法是生成一些较小的范围,然后进行一些调整以处理太接近x
的数字。但那真的很乏味。
有没有更好的方法呢?
答案 0 :(得分:2)
这是一个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
答案 1 :(得分:1)
我在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
这里是def
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)