在C中保存随机生成的数字

时间:2012-10-20 16:51:15

标签: c arrays function random

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

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

这里是随机数生成器函数,如果你想看到我想要传递给下一个函数的东西。

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);
                          }                          

3 个答案:

答案 0 :(得分: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()那个指针,否则你会泄漏它所占用的记忆。

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

答案 1 :(得分:0)

因此,首先,这并不能确保随机数始终不同:

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

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

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

答案 2 :(得分:0)

@Nikos给出了正确答案。

您也可以在调用函数中为数组分配内存,并将其传递给随机数生成函数。无论你做什么,确保幸运不是本地定义的阵列。而且,你生成数字的逻辑似乎是错误的(没有重复)。正如@Nikos指出的那样,这似乎是一项学校任务,我只会指出明显的错误。

a)你没有注意第二次生成的数字(如果第一次随机匹配已经存在的列表,则随机第二次调用)正在使用较旧的生成值集合进行检查。

b)随机生成函数给出0到RAND_MAX之间的随机数,RAND_MAX%101不是0.这意味着生成随机数的概率不均匀。