C语言的rand()函数尽管使用了srand((unsigned)time(NULL)),随机数结果仍然非常接近,这是为什么?
答案:2 悬赏:50 手机版
解决时间 2021-02-13 22:16
- 提问者网友:酱爆肉
- 2021-02-13 10:57
最近要做一个程序,是要把rand()的结果生成到1~30,我利用了标题所示函数,并用除法,但是每次结果都是4,后来直接使用标题所述的两个函数测试,多次测试发现生成的第一个随机数总是在6700附近,这种状况应该怎么解决?
最佳答案
- 五星知识达人网友:人類模型
- 2021-02-13 11:30
1~30 整型:
srand((unsigned)time(NULL));
for(i = 1;i <=110;i++)
printf("%d",rand() % 30 + 1 );
srand((unsigned)time(NULL));
for(i = 1;i <=110;i++)
printf("%d",rand() % 30 + 1 );
全部回答
- 1楼网友:末日狂欢
- 2021-02-13 13:02
实际上你的方法已经可以,问题就出现在你的函数调用上,譬如首先通过时间,然后产生随机:
(1)时间上,可以通过 tick 进行,提高精度(time 函数很不咋地),譬如获取 ms 单位精度;
(2)根据 c lib 获取 crandval
(3)有了时间的随机数 (timemagic) 和 clib 随机数, 最终通过求和关系 randval = (max + timemagic + crandval)%max,anywhere 你可以通过别的关系。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯