Random是主要产生伪随机数的类,它主要包括两个构造函数(无参构造函数和带一个Int32类型参数的构造函数),无参构造函数主要采用系统时间作为随机种子,带参数的构造函数需要自己去指定随机种子。而在很短的时间内生成大量随机数的时候,由于时间相当短暂,很大的可能性一部分随机数生成时,取到作为随机种子的系统时间相同,因此产生出来的随机数就相同了。

1)从逻辑上解决就是延长他的时间,可以加个延时,或者加大他的数据量都可以把时间延长。

2)就是再另一种随机一次,先随机取得0到i之间的一个数做数组的下标,再把取得这个下标对应的数与arr[i]调换,这样取得的数就是真正随机的了。。

for(int i = n - 1; i >= 0 ; i -- )
    swap(arr[i], arr[rand() % (i + 1)])

 

posted on 2023-12-11 17:34  阿霖找BUG  阅读(84)  评论(0编辑  收藏  举报