【发布时间】:2009-11-04 09:07:15
【问题描述】:
我想生成从 -n 到 n 不包括 0 的随机数。有人可以提供 C 中的代码吗?如何排除0?
【问题讨论】:
-
为什么投反对票?我希望这个网站强迫人们在投反对票时添加评论。
我想生成从 -n 到 n 不包括 0 的随机数。有人可以提供 C 中的代码吗?如何排除0?
【问题讨论】:
一个想法可能是在 [1,2n] 范围内生成一个随机数 x,包括端点。如果x 大于n,则返回-(x - n),否则返回x。
这应该可行:
int my_random(int n)
{
const int x = 1 + rand() / (RAND_MAX / (2 * n) + 1);
return x > n ? -(x - n) : x;
}
有关如何安全使用rand() 的更多信息,请参阅comp.lang.c FAQ;它解释了上述用法。
【讨论】:
我可以建议做的最简单的事情是生成一个介于 0 和 2n 之间的随机数,然后进行数学运算:
result= n - randomNumber
虽然 0 可能不太可能,但您可以使用 If 进行检查并重新生成随机数。
【讨论】:
int random(int N)
{
int x;
do{
x=rand()%(N*2+1)-N;
}while(x==0);
return x;
}
它从-N到N中选择一个数字,但如果它是0则继续这样做。
如 cmets 中所建议的,另一种方法是生成一个介于 -N 和 N-1 之间的数字,如果其为正数或 0,则将其递增:
int random(int N)
{
int x;
x=rand()%(N*2)-N;
if(x>=0) x++;
return x;
}
【讨论】: