Ich versuche, skip-Liste einfügen, also verwende ich rand(), um das Niveau zu bestimmen. Ich weiß, dass ich dauernde Münzwürfe machen muss, also denke ich, wenn ich Testanzahlen für den Generator drucke, sollte es ungefähr 50% weniger für jedes nachfolgende Niveau haben. Ich bin irgendwie mit der Logik beschäftigt, aber ich kann meinen Fehler nicht verstehen. Auf der letzten Ebene ist es ~ == zu der Ebene davor, anstatt der Hälfte.Logik Verwirrung mit rand() in einer for-Schleife
Hier ist mein Code:
#define MAXLEVEL 5
srand(time(NULL));
int newLevel;
int a[6] = {0};
for (int i = 0; i < 100000; i++) {
for (newLevel = 0; (rand() < RAND_MAX/2) && (newLevel < MAXLEVEL); newLevel++);
a[newLevel]++;
}
printf("0: %d 1: %d 2: %d 3: %d 4: %d 5: %d\n", a[0], a[1], a[2], a[3], a[4], a[5]);
Und hier ist der Ausgang:
0: 50018 1: 24969 2: 12532 3: 6334 4: 3094 5: 3053
Ich bin irgendwie mein Fehler erwartete etwas albern zu sein, aber ich habe für eine an diesem gesucht während jetzt und kann nicht scheinen, es zu fangen.
'newLevel <= MAXLEVEL' – gudok
Hmmm, mein Buch hat eigentlich' <'auch, ich denke, das ist ein Tippfehler? edit: Wenn ich es zu '<=' ändere, bekomme ich 'ABORT TRAP (6)', aber Werte, die korrekt aussehen. – Austin
Sie erhalten die Abbruchfalle, weil Sie das Ende des Arrays schreiben. Ändern Sie 'int a [6]' in 'int a [7]', wenn Sie 'newlevel <= MAXLEVEL' verwenden möchten – user3386109