关于随即数的小问题

lihuifeng4 2008-12-10 09:57:45
代码如下:
if(........)
{
srand((unsigned int)time(NULL)) ;
int q = rand() % 4;

int p = rand() % 100;
if ( p < x*100 ) //x为1分钟的概率
{
}
}
X为50%概率。
为什么我直接运行时就一起也不符合 P<X*100的条件,而单步走时又好了呢?请说下原因及解决方法,谢谢
...全文
139 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihuifeng4 2008-12-14
  • 打赏
  • 举报
回复
你的那个vector <int> vt用的是ADT容器吗?
SearchLife 2008-12-12
  • 打赏
  • 举报
回复
可以用random_shuffle产生每次都不相同的数

vector<int> vt;

for(int i = 1;i<100;i++)
{
vt.pushback(i);
}

random_shuffle(vt.begin(),vt.end());

vector<int>::iterator e = vt.begin();

while(条件) //不断循环取不同的随机数
{
cout << “请输入一小时内进入的人数” ;
double x ;
cin >> x ;
x= x/60 ;
int p = *e;
if ( p < x*100 ) //x为1分钟的概率
{
}
else
{
}

e++; //保证每回的随机数不同。

}




lihuifeng4 2008-12-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Chiyer 的回复:]
把你的代码贴全

还有

srand((unsigned int)time(NULL)) ;

在整个程序中只要使用一次
[/Quote]


呵呵,很对不起,没有说清楚。

X为概率的值,比如我做的是银行模拟。用户输入一分钟进来人的概率是多少,这个概率放在了X中。依我上面说的,随即产生P。看P是否小于X*100,以达到符合概率的目的。不知道这样说明不明白



main()
{
cout 《《 “请输入一小时内进入的人数” ;
double x ;
cin >> x ;
x= x/60 ;

这个X就是上面程序里的X了
lihuifeng4 2008-12-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 CA_HA_M 的回复:]
x是否等于0.5?

你可以让程序输出p的值,通过直接运行,查看p的变化
[/Quote]


运行了 发现全部为50,每次随即出来的都一样,为什么呢?
lihuifeng4 2008-12-11
  • 打赏
  • 举报
回复
你没有明白我的意思,例如X是0.5,那么X*100就是50.也就是说P要随即到0~49才算满足要求,而随即到50~99就不满足要求,这才是概率问题啊
  • 打赏
  • 举报
回复
为什么我直接运行时就一起也不符合 P <X*100的条件,而单步走时又好了呢?请说下原因及解决方法,谢谢
p是1到100,不满足这个条件不是很正常的吗。
lihuifeng4 2008-12-11
  • 打赏
  • 举报
回复
贴上部分源代码吧。

main()
{
cout 《《 “请输入一小时内进入的人数” ;
double x ;
cin >> x ;
x= x/60 ;

这个X就是上面程序里的X了
lihuifeng4 2008-12-11
  • 打赏
  • 举报
回复
呵呵,很对不起,没有说清楚。

X为概率的值,比如我做的是银行模拟。用户输入一分钟进来人的概率是多少,这个概率放在了X中。依我上面说的,随即产生P。看P是否小于X*100,以达到符合概率的目的。不知道这样说明不明白
lihuifeng4 2008-12-11
  • 打赏
  • 举报
回复
据说原因是因为程序直接运行时随即的过于频繁,所以导致随机数每次都一样。而单步时中间有时间间隔所以随即数就不一样,我不知道是为什么啊。 我直接运行程序时随即数全为50.我不明白为什么啊
lihuifeng4 2008-12-11
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 CA_HA_M 的回复:]
C/C++ codevoidmain()
{intq,p;doublex ;

cout<<"请输入一小时内进入的人数:";
cin>>x ;
x=x/100;//你原来的是除以60,我搞不明白,这里给改成除以100,但不影响p的随机性srand((unsignedint)time(NULL)) ;

q=rand()%4;
p=rand()%100;if( p<x*100)//假设输入的x==50cout<<"小于50"<<endl;elsecout<<"大于或于50"<<endl;

cout<<p<<endl;
}
按照你的方法应该不成问题,p的取值在1-100之间
[/Quote]

恩,我会给你分的。可惜你的回答还是错了。
首先,我的那段代码在一个函数中,了解到要把随即种子放在全局变量我的程序才正确,可我不知道为什么。你的程序是对的,可惜是在MAIN函数下。我不知道是不是这个原因。因为我的程序很大,所以发不了源代码。实在抱歉各位了。
CA_HA_M 2008-12-11
  • 打赏
  • 举报
回复
void main() 
{
int q,p;
double x ;

cout << "请输入一小时内进入的人数:" ;
cin >> x ;
x = x / 100 ; //你原来的是除以60,我搞不明白,这里给改成除以100,但不影响p的随机性

srand((unsigned int)time(NULL)) ;

q = rand() % 4;
p = rand() % 100;

if ( p < x*100 )//假设输入的x==50
cout << "小于50" << endl;
else
cout << "大于或于50" << endl;

cout << p << endl;
}

按照你的方法应该不成问题,p的取值在1-100之间
CA_HA_M 2008-12-10
  • 打赏
  • 举报
回复
x是否等于0.5?

你可以让程序输出p的值,通过直接运行,查看p的变化
wangyaosuper 2008-12-10
  • 打赏
  • 举报
回复
x 是一个小于1的数吧
lufy_sun 2008-12-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 lihuifeng4 的帖子:]

if ( p < x*100 ) //x为1分钟的概率
X为50%概率。

[/Quote]
不知道斑竹想表达的X 是什么、
是不是产生的随机数 p为小于100的正数呢?
星羽 2008-12-10
  • 打赏
  • 举报
回复
把你的代码贴全

还有

srand((unsigned int)time(NULL)) ;

在整个程序中只要使用一次
西山小月 2008-12-10
  • 打赏
  • 举报
回复
x是啥
bill830711 2008-12-10
  • 打赏
  • 举报
回复
不懂你说的什么意思

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧