基本上来说这是rand()伪随机函数的一个弊端,rand()中是一个已经定义好的序列,根据你传入的种子,然后产生不同的序列,这种问题,好像没有好的办法解决.
---------------------
你那不叫种子问题,是你在取随机数时,范围取小了,比如说改成2,那么只有1和2这两种,如果取成3,那就是1,2,3比前面的好点,一直这样下去就知道了.
设种子是没问题的.
恭喜恭喜,问题解决了,至于分,随便你给了,不知另一个兄弟是哪位,呵呵.
---------------------
(int)(20.0*rand()/(RAND_MAX+1.0));
因为你取的值太小了,将20.0改成1000再尝试下应该能看出点什么的,不行的话再修改大些.
-------------------
概率性问题而已.
-----------------
也许是巧合也许是必然,这个要看rand()的实现了.
不过既然是随机,你可以不用去太理会第一个数是否一样吧?如果你多次测试下均如此,可以跳过第一个数据.
使用srand()函数的目的就是为了每次得到不同的值,出现你这种情况有两个可能:
1.可能是你的调用方式有误,请写出你的完整程序。
2.随机数函数rand()确实有可能在你调用的两次都返回了相同的值,这种可能性是存在的(虽然机率较小)。
********************************************
请写出完整程序,尤其是包含的头文件和srand()的调用方式
********************************************
问题出在
1+(int)(20.0*rand()/(RAND_MAX+1.0));
因为其中有除法运算,所以在rand()返回值相差不大的时候,由于精度问题,这个式子就会返回同样的值,在这个前提下,如果两次运行程序的间隔较小,那么第一次rand()的返回值极有可能相差不大,所以会出现这个问题。