|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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] |
|