生成一个与另一个数字相差远的随机数

时间:2016-05-15 18:11:53

标签: random

x, range, d为整数。我们想要生成一个y数字,以便

  • 1 <= y <= range
  • abs(x-y) >= d

我想出的一个想法是生成一些较小的范围,然后进行一些调整以处理太接近x的数字。但那真的很乏味。

有没有更好的方法呢?

2 个答案:

答案 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)