0

我正在尝试找到保存一组随机生成的数字的最佳方法,以便稍后在另一个函数中调用它们。基本上我有一个函数可以生成数字并确保它们没有重复,但我需要另一个函数来搜索数字列表以查看用户是否选择了其中一个数字。每当我在搜索函数中调用随机数函数时,我都会得到一个不同随机数的列表。

基本上我只是想找出最好的方法来保存这个数字数组,这样下次我调用函数时它就不会让我知道数字,或者将它传递给下一个函数的最佳方法。

这是随机数生成器函数,以防您想查看我要传递给下一个函数的内容。

int i, j;
/*generates the set of random numbers*/
for(i = 0; i < MAX; i++) {



    random = rand() % 101;
   /*checks to to make sure there is no repeats*/
  for (j = 0; j < i; j++) {
       if (lucky[j] == random) {
          random = rand() % 101;
                               }
                          }
       lucky[i] = random;

printf("%3d",random);
                          }                          
4

3 回答 3

1

首先创建一个新数组:

int *lucky = malloc(amount_of_numbers_you_want * sizeof(int));

然后像往常一样用随机数填充它,然后返回它。例如:

int* generate_random_numbers(int amount)
{
    int *lucky = malloc(amount * sizeof(int));

    /* Fill lucky[] with 'amount' unique random numbers. */

    return lucky;
}

然后,每当您调用该函数时,将它返回的指针保存在某处。free()当你不再需要它时不要忘记指向那个指针,否则你会泄漏它占用的内存。

由于这看起来像家庭作业,因此我不会给您完整的代码,而是提供如何通过使用动态分配的数组来处理此类问题的一般方法。

于 2012-10-20T17:32:14.830 回答
0

所以,首先,这并不能确保随机数总是不同的:

如果您的列表有 [0.1,0.24,0.555] 并且您添加了一个带有 0.24 的新 RNG,它会重复,但可以生成一个 0.1,它也存储在 lucky[] 中(因此会重复,因为您不喜欢)。这不太可能,但有可能。

您想要的方式是使用 while(),并且只有在针对所有列表检查新的 RNG 时,才会添加它。

最后,通常保存 RNG 列表的最佳方法是设置 RNG 的种子。给定种子“a”,由种子“a”生成的数字列表始终相同。在这种情况下,您的函数甚至可以检查非重复的 RNG,因为结果总是相同的。

于 2012-10-20T17:30:42.083 回答
0

@Nikos 给出了正确答案。

您也可以在调用函数中为数组分配内存并将其传递给随机数生成函数。无论您做什么,都要确保 lucky 不是本地定义的数组。此外,您生成数字的逻辑似乎是错误的(没有重复)。正如@Nikos 所指出的,这似乎是一项学校作业,我只会指出明显的错误。

a)您没有处理第二次生成的数字(如果第一次随机与已经存在的列表匹配,则第二次调用随机数)正在使用旧的生成值集正确检查的情况。

b) 随机生成函数为您提供 0 到 RAND_MAX 和 RAND_MAX % 101 之间的随机数不是 0。这意味着生成随机数的概率不均匀。

于 2012-10-20T17:45:32.693 回答