5 Stimmen

Generieren von Zufallszahlen von -n bis n in C

Ich möchte zufällige Zahlen von -n bis n generieren, wobei 0 ausgeschlossen ist. Kann mir jemand den Code in C bereitstellen? Wie schließe ich 0 aus?

9voto

unwind Punkte 377331

Eine Idee könnte sein, eine Zufallszahl x im Bereich [1, 2n] inklusive zu generieren. Dann wird -(x - n) für x zurückgegeben, die größer als n sind, sonst einfach x.

Dies sollte funktionieren:

int my_random(int n)
{
  const int x = 1 + rand() / (RAND_MAX / (2 * n) + 1);

  return x > n ? -(x - n) : x;
}

Lesen Sie das comp.lang.c FAQ für weitere Informationen zur sicheren Verwendung von rand(); es erklärt die obige Verwendung.

3voto

Chris Punkte 8849

Das einfachste, was ich vorschlagen kann, ist, eine Zufallszahl zwischen 0 und 2n zu generieren und dann den Mathe-Trick zu machen:

result= n - Zufallszahl 

Auch wenn 0 sehr unwahrscheinlich sein könnte, können Sie das mit einem If überprüfen und die Zufallszahlengenerierung erneut durchführen.

1voto

Wernsey Punkte 5342
int random(int N) 
{ 
  int x;
  do{
    x=rand()%(N*2+1)-N;
  }while(x==0);
  return x;
}

Es wählt eine Zahl von -N bis N aus, aber wiederholt dies, wenn es 0 ist.

Ein alternativer Vorschlag in den Kommentaren generiert eine Zahl zwischen -N und N-1 und erhöht sie, wenn sie positiv oder 0 ist:

int random(int N) 
{ 
  int x;      
  x=rand()%(N*2)-N;
  if(x>=0) x++;
  return x;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X