我正在尝试跳过列表插入,所以我使用rand()来确定级别我知道我需要做连续的硬币翻转,所以我想如果我为生成器打印测试计数,它应该有大约50%减少每个连续的水平。我不知怎么搞砸了逻辑,但我没能理解我的错误在最后一级,它是~==到它之前的水平,而不是一半。
这是我的代码:

#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

我有点期待我的错误是愚蠢的,但我已经看了一段时间,似乎无法抓住它。

最佳答案:

iiNii