rand()函数 随机数

来源:百度知道 编辑:UC知道 时间:2024/05/03 03:50:56
下面这段代码是模拟洗牌的作用!只是其中我不懂的一段!
for(int j=0; j<52; j++)
{
int k = rand() % 52;
card temp = deck[j];
deck[j] = deck[k];
deck[k] = temp;
}
我对这个rand()函数有个疑问,就是:
假如rand()函数先后产生了53和105两个数,那么所得到的K值不就相同了吗?那样的话,洗出来的52张牌就有重复的啊!
补充一下,我书上的那个程序没有处理重复的代码。
麻烦知道的朋友给我详讲一下rand()这个函数!

这段程序实际上是for j的循环,随机生成一个0-51的数k,然后将第j张牌和第k张牌互换,因此即便是其中某两次k值相等也没有关系,因为那也达到了洗牌的效果,所以这段程序是没有问题的

你理解的大部分是对的,但是注意这里是互换,不存在复制的可能

我感觉你的主要问题不是rand()函数不懂,而是对于%运算符不懂

rand()函数作用是生成随机数
%是取余操作,就是x%y的话,是取x,y相除的余数

所以:
53%52: 结果为1
105%52:结果还为1

应该是算比整数副的牌(52的整数倍)多出的张数的

rand()生成一个1到很大的一个数,我也忘记了,但是k = rand() % 52; 只会生车0到51之间的任何一个整数。

这是一个交换的问题,即使两次产生的是同一个数,比如1和1互换,只是相当于做了一次无用功,不会有问题,具体函数用法可以查一下!

randomize()用于初始化随机种子,程序中一般只写一次
random(int n)求 0<= i < n 的整数

要不重复的随机数有序数列可以定义一个数组用于存放随机数