x, range, d
を整数にする。私たちは、私が思いついた別の番号から十分に離れた乱数を生成する
1 <= y <= range
abs(x-y) >= d
ひとつのアイデアは、いくつかの小さな範囲を生成し、いくつかの調整が数字を処理できるようにすることであるように、数y
を生成したいのですがあまりにも近くにx
に近いです。しかし、それは本当に面倒です。
もっと良い方法がありますか?ここで
x, range, d
を整数にする。私たちは、私が思いついた別の番号から十分に離れた乱数を生成する
1 <= y <= range
abs(x-y) >= d
ひとつのアイデアは、いくつかの小さな範囲を生成し、いくつかの調整が数字を処理できるようにすることであるように、数y
を生成したいのですがあまりにも近くに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)
は離れ少なくとも単位である10の範囲1の数値を返す必要がありますこれは、3,4,5,6,7を戻り値として除外し、10-5 = 5の有効な数値を残します。この関数は、1から5の範囲の1つを選択します。選択された数が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'はランダムであり、いつも望ましい距離にあります。 –