创建随机数(Create random numbers)

2019-09-30 05:45发布

这是我的第一个问题在这里,我正在做一个小游戏,并分配角色,我需要的随机数。 我有这样的代码,但有可能是数字不重复? 谢谢。

void giveroles() {
    srand(time(NULL));
    int r = rand() % i + 1; 
    switch ( r ) { /* ... */ }
}

Answer 1:

如果你想随机地分配小组数字,而不是随机生成它们,创造你想要的号码列表,然后随机化列表的顺序(遍历列表,随机交换条目)。

例如:

int cards[52];
for(int i = 0 ; i < 52 ; i++)
{
    cards[i] = i;
}
for(int i = 0 ; i < 1000 ; i++)
{
    int r1 = rand()%52;
    int r2 = rand()%52;
    int t = cards[r1];
    cards[r1] = cards[r2];
    cards[r2] = t;
}
for(int i = 0 ; i < 52 ; i++)
{
    printf("%d\n", cards[i]);
}

为了完整起见,已经指出,在这种方式洗牌有失偏颇。 下面是这应该是公正的变化:

cards[0] = 0;
for(int i = 1 ; i < 52 ; i++)
{
    int r = rand() % (i+1);
    cards[i] = cards[r];
    cards[r] = i;
}

(应当进一步指出,服用)兰特的模块(也可能有偏差,作为兰特(范围内)不会是偶数倍)



Answer 2:

取出线srand(time(NULL)); 。 你应该在一般只能用在你的程序中,例如在开始做一次main() ,为了随机使用的后续调用的种子rand()



Answer 3:

如果你不想重复随机数,解决的办法是跟踪其随机数字您以前使用的,如果你得到一个“打”在现有的号码列表,再试一次。

此外,使用srand(time(NULL)); 只应做一次。 我怀疑这是你越实际上是问这个问题。



文章来源: Create random numbers
标签: c random