31 全局变量和局部变量动动手 ,没明白是怎么使随机数不重复的。
void shuffle(int array[], int length){
int index, temp, i;
srand(time(NULL));
for (i = 0; i < length; i++)
{
index = rand() % (length - i) + i; //从这句开始没看懂
if (index != i)
{
temp = array;
array = array;
array = temp;
}
}
}
本帖最后由 superbe 于 2019-9-3 12:04 编辑
实测index是有可能重复的。length越小,重复可能性就越大。
rand()产生随机数的范围是0--32767,%是求除法余数,比如对100求余,当么余数范围当然是0--99。
所以上面for循环产生的index范围:(比如length=5)
i=0时,index=0--4
i=1时,index=1--4
i=2时,index=2--4
i=3时,index=3--4
i=4时,index=4--4
下面的if(index!=i)判断是为了避免自己和自己做交换。
页:
[1]