-1

如何在不使用标准 C 函数(如时间函数、静态变量或全局变量)的情况下编写随机生成器函数?

/* #include <time.h> Don't use time functions. */
/* int seed = 1234; Don't use global variables. */
int generate_random(void)
{
    /* static int seed = 1234; Don't use static variables. */
    /* return (time() % 100); Don't use time functions. */
}

换句话说,这random generator function不应该记住最后的状态。

4

5 回答 5

2

你也可以使用 srand by

#include<stdlib.h>

srand(getpid());

int num = rand();
于 2013-08-22T06:28:20.707 回答
1

此解决方案符合您的所有标准,但它确实需要 Internet。*

unsigned generate_random () {
    FILE *random;
    char cmd[512];
    unsigned number;

    snprintf(cmd, sizeof(cmd),
         "wget -qO - "
         "'http://www.random.org/integers/"
         "?num=1&min=0&max=%u&col=1&base=10&format=plain&rnd=new'",
         USHRT_MAX);

    random = popen(cmd, "r");
    fscanf(random, "%u", &number);
    pclose(random);

    return number;
}

*不过,这并不是反对算法的真正标志,因为互联网是随机数据的绝佳来源。;-)

于 2013-08-22T07:25:48.557 回答
0

假设你需要自己做伪随机数生成器,你需要记住状态。

如果函数不应该记住最后状态,则需要将其作为参数传递:

int generate_random(int * lastState)
{
    // generate next random from lastState
    // store state to lastState
    // return result
}

int main(void)
{
    int lastState = 1234; // seed it
    int random = generate_random(&lastState);
}
于 2013-08-22T07:09:53.697 回答
-1

do

#include <time.h>
#include <stdlib.h>

srand(time(NULL));
int r = rand();

if you want to limit the number use

int r = minNum + rand() % maxNum;

do not try to create your own random function. it will not end well

于 2013-08-22T06:25:17.533 回答
-1

猜测你的问题......我不得不问想要一个随机种子的要求是什么?

能够设置种子值对代码来说是一个加分项,因为您至少尝试执行回归测试之类的事情。

如果您的问题一般是关于随机数的。生成一系列随机数需要两个步骤。

首先,设置一个种子值,例如,srand(1234);其中 1234 是种子值。您的代码仅发出此指令一次。当您第二次运行程序时,您的代码可以重复使用相同的种子值,在这种情况下,随机数的序列将是相同的。如果您设置不同的种子,那么您将获得不同的随机数序列。

第二步是检索随机数值以在您的代码中使用。

一种可能的方法

理论上,您可以使用固定的种子值,然后生成 R 个随机数,其中 R 是some number taken from the systemmod 100(例如)。然后将第 R 个随机数用作应用程序实际随机数序列的种子值。

您说您不想使用Time(),但也许在这个随机数的双重序列中,该Time() mod n函数将提供足够的随机性。

现在,我在理论上说,因为来自rand()的随机数实际上是伪随机的,并且出于所有意图和目的,它们确实是随机的(拥有数学博士学位的人会这么说……),所以我怀疑这样做是否会产生“双重选择”数字更随机。但是,这种或类似的方法可能会让审稿人或老板感觉更舒服,但这会是一种虚假的安全感。

于 2013-08-22T07:03:15.760 回答