讓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'將是隨機的,並且總是在想要的距離。 –