Nicht-Wiederholung random number generator in C
Ich soll ein Programm schreiben, so dass ich drucken Sie 10 Zufallszahlen jedes mal, wenn ich ihn laufen, der Zufallszahlen ausdrucken werden sollte, 1-10, auch Sie sollten sich nie wiederholen.
UPDATE:Sorry für die nicht unter Angabe der genauen problem, im Grunde die while-Schleife, die ist wohl neu ordnen Sie die Zufallszahlen nur, wenn es hasent wurden verwendet, verursacht mein Programm nicht drucken überhaupt nichts. Wenn ich kommentieren Sie die gesamte while-Schleife und lassen Sie die printf () an der Unterseite druckt es aus 10 Zufallszahlen zwischen 1-10, jedoch schreibt Sie nur wiederholt.
Könnte mir jemand sagen wie kann ich fix meinen code oder mir ein paar Tipps geben?
#include <stdio.h>
#include <time.h>
int main()
{
int array[10];
int x, p;
int count;
int i=0;
srand(time(NULL));
for(count=0;count<10;count++){
array[count]=rand()%10+1;
}
while(i<10){
int r=rand()%10+1;
for (x = 0; x < i; x++)
{
if(array[x]==r){
break;
}
if(x==i){
array[i++]=r;
}
}
}
for(p=0;p<10;p++){
printf("%d ", array[p]);
}
return 0;
}
Linear Feedback Shift Registers (LFSR)
oder Pseudo Random Number Generator (PRNG)
Auch in Ihrem code, können Sie
srand()
vor dem zweiten rand()
auch.Bitte erwähnen Sie das problem, das Sie erleben.
Sorry, aktualisiert.
InformationsquelleAutor Titan | 2014-04-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
if(x==i)
kann nie wahr sein innerhalb derfor (x = 0; x < i; x++)
Schleife, daherdie
while
Schleife wird nie beendet.Die if-Anweisung verschoben werden nach der for-Schleife:
Auch die erste Schleife
ist unnötig, da die Werte später überschrieben werden.
(Wenn Sie look-up "zufällige permutation" oder "Fisher–Yates-shuffle"
dann werden Sie finden effizienter algorithmen für die Herstellung eines nicht-Wiederholung
von Zufallszahlen.)
InformationsquelleAutor Martin R
(1) die Einrückung ist falsch. Die richtige wäre:
(2) Sobald die Einrückung korrekt ist, ist es leichter zu sehen, die problem. Die
if(x==i)
Teil sollte innerhalb derwhile
aber außerhalb derfor
.Diese Drucke das richtige Ergebnis.
(3) jetzt können Sie den
for(count=0;count<10;count++)
Teil der füllt das array mit Wiederholungen. Ihr Ergebnis wird überschrieben durch den anderen Teil.Einer moralisierenden Hinweis: für die richtige Formatierung, die wirklich hilft, Stelle den Fehler. Nicht vernachlässigen Sie.
InformationsquelleAutor Gassa
Mit einem shifting mask-Algorithmus, Sie können die Generierung von pseudo-Zufallszahlen, ohne sich zu wiederholen. Ich habe eine meiner Funktionen geben ein Beispiel, unten. Dieser Prozess ist 10x schneller als alle anderen angebotenen Algorithmus, der verwendet auch keine zusätzlichen Speicher. Diese Art von Algorithmus ist in der Regel verwendet für "digital auflösen" und "scatter" - Effekte, etc., aber meine Implementierung konzentriert sich auf einen eindimensionalen Effekt.
Genießen,
Dr. B
InformationsquelleAutor Bryan Wilcutt