【发布时间】:2017-09-11 22:07:59
【问题描述】:
我需要为大学作业制作一个模拟器。在这个模拟器中有 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;
}
};
【问题讨论】:
-
您不应该多次使用
srand。实际上,您根本不应该使用它。看this example。 -
你需要在main函数中放一次srand,其他地方不要放
-
如果您每次请求随机数时都使用相同的种子值调用
srand,您将得到相同的数字。将对srand的调用移至main函数的顶部,在该函数中只会在程序启动时调用一次。 -
您应该使用一次
srand(),然后在其他任何地方使用rand()。 -
就是这样,主要使用 srand() 一次。谢谢。
标签: c++ random numbers generator