0

我有一个简单的 C 代码,中间有一个随机数生成代码.. 问题是这个数字在很长一段时间内保持不变,然后上升一个!运行 C 程序 30 次以上,rand_pick 可能为 5,然后最终变为 6,...我想知道为什么以及是否有另一种方法可以产生真正随机的 1 到 9 位数字。

int rand_pick;
srand (time(NULL));
rand_pick = 1 + (int) (9.0*rand()/(RAND_MAX+1.0));

非常感谢 ;)

4

2 回答 2

2

不,数字应该是准随机的。您可以运行这段代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define RANDOM_COUNT 10000

int main(void) {
    int rand_count[10] = {};
    int rand_pick;
    int i;

    srand (time(NULL));

    // run number of experiments
    for(i = 0; i < RANDOM_COUNT; i++) {
        rand_pick = 1 + (int) (9.0*rand()/(RAND_MAX+1.0));
        rand_count[rand_pick]++;
    }

    for(i = 1; i <= 9; i++) {
        printf("%d => %.3f %%\n", i, rand_count[rand_pick] /((float) RANDOM_COUNT));
    }   
}  

它将随机选择 10,000 个数字并计算它们的分布。我总是得到均匀分布:

1 => 0.111 %
2 => 0.111 %
3 => 0.111 %
4 => 0.111 %
5 => 0.111 %
6 => 0.111 %
7 => 0.111 %
8 => 0.111 %
9 => 0.111 %
于 2012-09-26T05:51:37.607 回答
1

您只想在程序中初始化 srand 一次。如果您出于某种原因每秒运行该程序数次,那么您需要从其他地方(如 Linux 上的 /dev/random)获取一个随机数来为您的随机数生成器播种。

于 2012-09-26T05:39:39.683 回答