rand()函数 随机数

下面这段代码是模拟洗牌的作用!只是其中我不懂的一段!
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值相等也没有关系,因为那也达到了洗牌的效果,所以这段程序是没有问题的

你理解的大部分是对的,但是注意这里是互换,不存在复制的可能
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-12-13
我感觉你的主要问题不是rand()函数不懂,而是对于%运算符不懂

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

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

应该是算比整数副的牌(52的整数倍)多出的张数的
第2个回答  2008-12-13
rand()生成一个1到很大的一个数,我也忘记了,但是k = rand() % 52; 只会生车0到51之间的任何一个整数。
第3个回答  2008-12-13
这是一个交换的问题,即使两次产生的是同一个数,比如1和1互换,只是相当于做了一次无用功,不会有问题,具体函数用法可以查一下!
第4个回答  2008-12-13
randomize()用于初始化随机种子,程序中一般只写一次
random(int n)求 0<= i < n 的整数

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

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网