首页>Program>source

只要我运行这段代码,我都会得到相同的结果。

程序

#include<stdlib.h>
int main(int agrc, const char *argv[]) {
 int i = rand();
 printf("%d\n",i);
 for(i=0;i<10;i++) {
  printf("%d\n",rand());
 }
}

结果:

41
18467
6334
26500
19169
15724
11478
29358
26962
24464
5705

我在 mingw上运行了它 .其实我在学 Objective-C

请帮助我。

最新回答
  • 2021-1-10
    1 #

    您必须在使用唯一编号的rand函数中植入种子.最简单的方法是使用 time()

    例如

    srand(time(NULL));
    rand();//now returns a random number
    

    原因是rand()(或任何其他基于算法的函数)提供的随机数不是随机的. rand函数仅获取其当前数值状态,应用转换,将转换结果另存为新状态并返回新状态。

    因此,要让rand返回不同的伪随机数,首先必须将rand()的状态设置为唯一。

  • 2021-1-10
    2 #

    您要初始化PRNG。

    将其初始化 (通常在 once内部 )并致电 main() 功能。

    如果不初始化PRNG,则默认为使用值 srand()初始化它 .当然,使用其他常数初始化它不会为程序的不同运行提供不同的伪随机数。

    1
    

    您需要初始化一个随程序每次运行而变化的值.从 srand(1); /* same as default */ srand(42); /* no gain, compared to the line above */返回的值 函数是最常用的值。

    time()
    

    srand(time(NULL)); /* different pseudo random numbers almost every run */的问题 是它在同一秒返回相同的值.因此,如果您在同一天的11:35:17两次调用您的程序,您将获得相同的伪随机数。

  • 2021-1-10
    3 #

    只需添加到yacoby的答案中-我对此感到有些惊讶, 默认为基于时间的种子,因此我查阅了手册页:

    time(NULL)

    因此,如果您更改代码以使用

    If no seed value is provided, the rand() function is automatically seeded with a value of 1.

    您仍然应该看到相同的输出-但是 seed(1) 每次都会改变它。

  • 2021-1-10
    4 #

    seed(time())的输出 是pseudo-random,这意味着它看起来实际上是随机的,但每次都从一个称为种子的特殊值开始,以相同的方式进行计算.使用相同的种子值,您将获得相同的随机数序列。

    要设置其他种子,请使用标准C函数 rand 在您开始生成随机数之前,请在代码中输入一次.每次运行程序时,获取不同的随机数序列的一种常见方法是将种子基于时钟时间.例如. void srand(unsigned int)

    srand(clock())

相关问题

  • python:在Flask中为url_for创建动态参数
  • 适用于MATLAB的Java JPA类