【问题标题】:Why do I get the same random numbers every time I run my program? [duplicate]为什么每次运行程序都会得到相同的随机数? [复制]
【发布时间】:2018-12-25 09:46:37
【问题描述】:

我正在尝试生成随机数(1 到 6),但每次运行我的程序时,我总是得到相同的两个数字。代码如下:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

// function prototype
int random();

// main function
int main()
{
    int rand1=random();
    int rand2=random();
    cout << rand1 << endl;
    cout << rand2 << endl;

    cin.get();
    return 0;
}

//function definition
int random()
{
    const int MAX_NUMBER = 6;
    const int MIN_NUMBER = 1;
    unsigned seed=time(0);
    srand(seed);

    int randomNumber;
    randomNumber=(rand() % (MAX_NUMBER - MIN_NUMBER + 1)) + MIN_NUMBER;


    return randomNumber;
}

我不知道出了什么问题以及为什么我总是得到相同的两个随机数。

【问题讨论】:

  • 您应该只在程序开始时seed 一次。不是每次打电话给rand
  • srand(time(0)) 移动到主目录
  • 在代码的开头播种您的 RNG 一次。你这样做的方式使你的数字不那么随机,而不是更多。但是不确定这是不是答案。
  • 注意编译时常量全部大写是反模式。

标签: c++ function random


【解决方案1】:

注意:

rand() 返回一个从032,767 范围内的随机正整数。这个函数可以被认为是用32,767faces掷骰子。

这些数字是通过数学算法生成的,当给定一个起始数字(称为"seed")时,总是会生成相同的数字序列。由于每次种子保持不变时都会生成相同的序列,因此rand() 函数会生成一个伪随机序列。

防止每次都生成相同的序列,请使用 srand(x) 更改 seed 值。

示例程序:

/*generate 10 random numbers between 1 and 6 inclusive, without repetition of the sequence between program runs*/

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

int main(void)
{
     // to prevent sequence repetition between runs     
     srand(time(NULL));  


     for(int i = 1; i <=10; i++)     // looping to print 10 numbers
     {
           cout<< 1 + rand( ) % 6;   // formula for numbers 
     }

     return 0;
}

【讨论】:

  • rand() 返回 0 到 32,767 范围内的随机正整数。这个函数可以被认为是掷骰子,有 32,767 个面。 不完全正确。 RAND_MAX 必须至少为 32,767。例如在我的机器上RAND_MAX2,147,483,647
猜你喜欢
  • 2011-12-06
  • 2011-11-27
  • 2015-11-10
  • 2013-09-23
相关资源
最近更新 更多