私はスキップリスト挿入をしようとしていますので、レベルを決定するためにrand()を使用しています。私は連続コインフリップをする必要があることを知っているので、私は、ジェネレータのテストカウントを印刷すると、連続レベルごとに約50%少なくなるはずです。どういうわけか私は論理を台無しにしていますが、私は間違いを犯すことができません。最後のレベルでは、半分ではなく、前のレベルに〜==です。ここで forループでのrand()とのロジック混乱
は私のコードです:#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]);
そして、ここでは出力です:
0: 50018 1: 24969 2: 12532 3: 6334 4: 3094 5: 3053
私は一種の愚かな何かをする私のミスを期待していたが、私はこの時に見てきました今はそれを捉えることができない。
'newLevel <= MAXLEVEL' – gudok
私の本には実際に' <'もありますが、これは誤植でしょうか?編集: '<='に変更すると 'ABORT TRAP(6)'が表示されますが、正しい値になります。 – Austin
アレイの終わりを書き去っているため、アボートトラップが表示されます。 'newlevel <= MAXLEVEL'を使いたい場合、' int a [6] 'を' int a [7] 'に変更してください。 – user3386109