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?
Antworten
Zu viele Anzeigen?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.
Chris
Punkte
8849
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;
}