在C中生成从-n到n的随机数

时间:2009-11-04 09:07:15

标签: c random

我想生成从-n到n的随机数,不包括0.有人能为我提供C代码吗?如何排除0?

3 个答案:

答案 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;
}