马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 额外减小 于 2023-2-6 13:08 编辑
让我们运行这个程序:#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
time_t t;
time(&t);
for(int i=0;i<100;i++)
{
srand((unsigned)t);
printf("%d\n",rand());
t++;
}
return 0;
}
将会得到一串很水的伪随机数列。如下:28210
28213
28216
28219
28223
28226
28229
28233
28236
28239
28242
28246
28249
28252
28255
28259
28262
28265
28268
28272
28275
28278
28281
28285
...
请问有大神可以说明根本的原因是什么吗?
如果rand()函数的返回值真的只是随着种子增大而不断加3/加4...
那是不是有点太奇怪了吧!
有人可以说明具体的算法是怎样的吗?
当然,做一些小小的改进后就会好很多。#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
time_t t;
time(&t);
for(int i=0;i<100;i++)
{
srand((unsigned)t);
printf("%d\n",rand());
t=t*(rand()%100)-rand()*2;
}
return 0;
}
28957
27620
3391
18332
10773
23052
21548
19443
29158
20162
119
11227
13053
18288
30477
27599
16445
3221
1351
1083
27932
15503
4292
2912
27957
12361
4772
17276
16231
...
谢谢解答
[/code] |