我需要为大学作业制作模拟器。在这个模拟器中有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;
}
};
答案 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年的秒数,并且您的程序可能需要少于完成的次数,因此您在每次调用之前都会使用相同的值重置生成器。当然,每次调用都会返回相同(第一)的值。