使用了种子srand()后,每次第一个随机数都相同

2025-05-20 00:38:14
推荐回答(2个)
回答1:

基本上来说这是rand()伪随机函数的一个弊端,rand()中是一个已经定义好的序列,根据你传入的种子,然后产生不同的序列,这种问题,好像没有好的办法解决.

---------------------
你那不叫种子问题,是你在取随机数时,范围取小了,比如说改成2,那么只有1和2这两种,如果取成3,那就是1,2,3比前面的好点,一直这样下去就知道了.
设种子是没问题的.
恭喜恭喜,问题解决了,至于分,随便你给了,不知另一个兄弟是哪位,呵呵.

---------------------
(int)(20.0*rand()/(RAND_MAX+1.0));
因为你取的值太小了,将20.0改成1000再尝试下应该能看出点什么的,不行的话再修改大些.

-------------------
概率性问题而已.

-----------------
也许是巧合也许是必然,这个要看rand()的实现了.

不过既然是随机,你可以不用去太理会第一个数是否一样吧?如果你多次测试下均如此,可以跳过第一个数据.

回答2:

使用srand()函数的目的就是为了每次得到不同的值,出现你这种情况有两个可能:

1.可能是你的调用方式有误,请写出你的完整程序。

2.随机数函数rand()确实有可能在你调用的两次都返回了相同的值,这种可能性是存在的(虽然机率较小)。

********************************************

请写出完整程序,尤其是包含的头文件和srand()的调用方式

********************************************

问题出在
1+(int)(20.0*rand()/(RAND_MAX+1.0));

因为其中有除法运算,所以在rand()返回值相差不大的时候,由于精度问题,这个式子就会返回同样的值,在这个前提下,如果两次运行程序的间隔较小,那么第一次rand()的返回值极有可能相差不大,所以会出现这个问题。