我想生成从-n到n的随机数,不包括0.有人能为我提供C代码吗?如何排除0?
答案 0 :(得分:9)
一个想法可能是生成[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;它解释了上述用法。
答案 1 :(得分:3)
我建议做的最简单的事情是生成0到2n之间的随机数,然后做数学技巧:
result= n - randomNumber
虽然0可能不太可能,但您可以使用If检查并重做随机数生成。
答案 2 :(得分:1)
int random(int N)
{
int x;
do{
x=rand()%(N*2+1)-N;
}while(x==0);
return x;
}
它从-N到N选择一个数字,但如果为0,则继续执行。
备注,如评论中所建议,在-N和N-1之间生成一个数字,如果其为正数或0,则递增它:
int random(int N)
{
int x;
x=rand()%(N*2)-N;
if(x>=0) x++;
return x;
}