独特的随机数

时间:2012-08-16 14:32:05

标签: c random

我一直在研究一个随机数gen,创建6个独特的随机数1-49,我可以使它工作,所以6个随机数1-49,或6个独特的随机数,但不是以上所有的同时。我可以编译代码,但每次尝试在不同的地方使用% 49 +1时它都会崩溃。

我使用的代码是:

{
                int numbers [SIZE];
                int i, j, n;

                srand (time(NULL));

                for (i = 0; i < SIZE; i++)
                    numbers[i] = i;

                for(i = 0; i < SIZE; i++)
                {
                j = rand() % 49 + 1;
                n = numbers[j];
                numbers[j] = numbers[i];
                numbers[i] = n;
                }

                for (i = 0; i < SIZE; i++)
                MyOutputDebugString ("%d\n", numbers[i]);

SIZE定义为6。

由于

2 个答案:

答案 0 :(得分:5)

  

SIZE定义为6。

因此,您的数组numbers就像

int numbers [6];

一次

j = rand() % 49 + 1;

执行,j介于[1; 49],所以,如果它是&gt; 5,在这一行,你将有一个超出范围索引::

n = numbers[j];

答案 1 :(得分:0)

错误来自调用不存在的数组的一部分。

n = numbers[j];

j的值将是您的随机数,最可能大于您的SIZE。

更改代码的这一部分:

                for (i = 0; i < SIZE; i++)                           
                    numbers[i] = i;

                for(i = 0; i < SIZE; i++)
                   {                       
                   j = rand() % 49 + 1; 
                   n = numbers[j];  
                   numbers[j] = numbers[i];
                   numbers[i] = n;
                   }

您可以设法在一个循环中实现相同的效果,如下所示:

for (i = 0; 1 < SIZE; i++)
{
   numbers[i] = rand() % 49 + 1;
}

我希望这会有所帮助。