C ++每次都会生成随机数

时间:2017-04-15 22:46:30

标签: c++ random numbers generator

我需要为大学作业制作模拟器。在这个模拟器中有3台计算机,其中2台向计算机1发送消息,然后计算机1决定发送消息或拒绝它。拒绝是随机机会,计算机2的拒绝率为20%,计算机3的拒绝率为50%。我使用rand()%100 + 1函数和srand(time(NULL))种子。它产生一个随机数,但是每次使用相同的随机数时我需要多次运行。例如,如果我运行模拟12次并且生成的数量是45,则使用45次12次。我已经将随机数生成器放在代码中并在外部创建了一个函数。 你如何制作一个随机数生成器,每次生成一个随机数?

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

using namespace std;

int randomgen()
{
int rndnum=0;
srand (time(NULL));
rndnum=rand()%100+1;
cout<< rndnum<<endl;
return rndnum;
}


struct comp1
{

int rejected=0; 
int received=0; 
int sent=0; 
int onhold=0; 


bool comp2reception()
{
    received++;
    bool result=false;
    int rndnum=0;
    srand (time(NULL));
    rndnum=rand()%100+1;

    if(rndnum<=20)
    {
        rejected++;
        result=false;
    }
    if(rndnum>=21)
    {
        onhold++;
        result=true;
    }
    return result;
}



bool comp3reception()
{
    received++;
    bool result=false;
    int rndnum=randomgen;

    if(rndnum<=50)
    {
        rejected++;
        result=false;
    }
    if(rndnum>=51)
    {
        onhold++;
        result=true;
    }
    return result;
}

};

2 个答案:

答案 0 :(得分:3)

使用C ++ 11标题<random>

#include <random>

static std::random_device rd;
static std::mt19937 gen(rd());

int randomgen()
{
  std::uniform_int_distribution<> dis(0,100);
  int rndnum = dis(gen);
  std::cout << rndnum << std::endl;
  return rndnum;
}

答案 1 :(得分:0)

在程序开头只调用一次srand(time(NULL))

由于time()返回1970年的秒数,并且您的程序可能需要少于完成的次数,因此您在每次调用之前都会使用相同的值重置生成器。当然,每次调用都会返回相同(第一)的值。