我想生成从-n到n之间(不包括0)的随机数。有人能提供C语言代码吗?如何排除0?
一个想法是在范围[1,2n]内生成一个随机数x
。然后对于大于n
的x
,返回-(x-n)
,否则只返回x
。
这个方法应该可以工作:
int my_random(int n)
{
const int x = 1 + rand() / (RAND_MAX / (2 * n) + 1);
return x > n ? -(x - n) : x;
}
请参阅comp.lang.c FAQ以获取有关如何安全使用rand()
的更多信息;它解释了上述用法。
我建议的最简单的方法是生成0到2n之间的随机数,然后使用以下数学技巧:
result= n - randomNumber
int random(int N)
{
int x;
do{
x=rand()%(N*2+1)-N;
}while(x==0);
return x;
}
int random(int N)
{
int x;
x=rand()%(N*2)-N;
if(x>=0) x++;
return x;
}