C中非重复数字的数组?

时间:2014-03-19 18:05:58

标签: c arrays random unique

到目前为止,我有一组来自1-49的六个随机数,但有些重复,例如,12 15 43 43 22 15 有没有解决这个问题的方法?

到目前为止,我有......

int* get_numbers()
{
        int Array[6], i;
        printf("\n\n Your numbers are : ");
        for (i = 0; i < 6; i++)
        {
               Array[i] = ((rand() % 49) + 1);
               printf("%d ",Array[i]);
        }
}

任何反馈都会很棒,谢谢

4 个答案:

答案 0 :(得分:2)

你可以简单地扔掉重复的东西。

另一种选择是创建一个数字1-49,shuffle them的数组,然后取第一个数字。

答案 1 :(得分:1)

您需要添加一个单独的循环,从0开始,包括i,独占,检查候选编号与之前添加到数组中的数字。如果检查发现重复,请不要递增i,并尝试再次生成随机数:

int i = 0;
while (i != 6) {
   int candidate = ((rand() % 49) + 1);
   int ok = 1; // ok will become 0 if a duplicate is found
   for (int j = 0 ; ok && j != i ; j++) {
       ok &= (candidate != Array[j]);
   }
   if (ok) {
       Array[i++] = candidate;
       printf("%d ", candidate);
   }
}

Demo on ideone.

答案 2 :(得分:0)

rand函数不知道它以前的输出,所以你可以在将它保存到数组之前进行检查

答案 3 :(得分:0)

如果您将第一个随机数作为x,请将第二个随机数作为random(1 to x-1)random(x+1 to n)的随机数。以这种方式继续。