有没有比以下更好的方法:

#define BOUND 7

int r;
int e = 1;

r = rand() % BOUND;

while (r == e){

    r = rand() % BOUND;
}

用于生成除值 e 之外的范围内的数字?

最佳答案

你要的是在 [0, BOUND) 范围内生成一个随机数,不包括值 e
algorithm explained here 似乎是不使用循环的最佳方法。

这是C代码:

#define BOUND 7

int r;
int e = 1;

r = rand() % (BOUND-1);

if (r >= e){
    r = r+1;
}

因此,您基本上会在 [0, BOUND-1) 范围内生成一个值,如果该值大于或等于排除值 e ,则将随机数加一。

请记住,rand% 一起使用并不能保证生成的数字的严格均匀分布。有关更多信息,请访问 check out this question/answers

关于c - 在不连续范围内生成随机数的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47271305/

10-10 11:55