批量产生随机数的问题
c++吧
全部回复
仅看楼主
level 4
龙0凰 楼主
今天有人问我要彩票号码,我就随便编了个生成随机数的小程序
……结果随机生成的数列都是等差数列
原理我知道,因为这个程序一旦开始就是按照内部时钟走,只要确定第一个数字的seed之后,后面都是按照伪随机数表来跳,所以生成的都是差值为3的等差数列……
现在唯一想到的解决方法是每个数字生成的时候都暂停一下等待键入enter……
好麻烦……
有什么解决的办法呢
2013年06月12日 08点06分 1
level 12
不是有库函数吗——srand/rand?
2013年06月12日 08点06分 2
我用的就是这两个函数,而且每次都是srand再rand,没用,只要确定了序列中第一个随机数,后面的都是直接从随机数表里挨个来,比方说第一个抽到7,后面几个就肯定是10,13,16……
2013年06月12日 08点06分
因为执行后续语句的时间是不会改变的,而srand函数是以时间作为变量,现在的变量因为时间不变,已经变成定量了,我知道问题所在,但是想不出好的算法去解决
2013年06月12日 08点06分
回复 龙0凰 :这说明你没有正确使用 srand/rand。你到底是怎么算的啊~虽然只是一个伪随机数,但也不能这么“不随机”吧~我昨天还用呢,没有你说的这种情况~~
2013年06月12日 08点06分
回复 rushman008 :问题就出在每次取值都初始化了,产生随机数是根据当前内部时钟的时间来确定种子的,而每次都初始化之后,相当于计算机以确定的时间间隔产生种子,每个种子产生的时间刚好是前一个种子加上运行代码之间所需的时间
2013年06月12日 09点06分
level 11
在每次产生随机数的函数前面加初始化。。。
2013年06月12日 08点06分 3
恩……how to do……
2013年06月12日 08点06分
回复 龙0凰 :我给你代码吧,我以前刚学的时候写的。适合初学者。
2013年06月12日 12点06分
回复 龙0凰 :加我QQ961195913
2013年06月12日 12点06分
回复 龙0凰 :srand((unsigned)time(NULL)); c= (rand()%33);
2013年06月12日 12点06分
level 13
随机数种子初始化一次还不够么,为什么要每次都初始化……
2013年06月12日 08点06分 4
啊……谢谢,想明白了,该死的思维死角……
2013年06月12日 08点06分
level 4
龙0凰 楼主
写完了……我把源代码发一下
想中彩票脱离码农苦海的就拿去用吧……

#include<iostream>#
include int main(){using namespace std;int a,b,c,d,e,f,x;srand((unsigned) time(NULL)); start: a=rand()%32;do{srand((unsigned) time(NULL)); b=rand()%32;}while(a==b);
do{c=rand()%32;}while(c==a||c==b);
do{d=rand()%32;}while(d==a||d==b||d==c);
do{e=rand()%32;}while(e==a||e==b||e==c||e==d);
do{f=rand()%32;}while(f==a||f==b||f==c||f==d||f==e);
do{x=rand()%16;}while(x==a||x==b||x==c||x==d||x==e||x==f);
cout<<"红球是:"<>C;if(C=='a'){cout<<"C is"<
2013年06月12日 09点06分 5
运行不了。
2013年06月12日 09点06分
level 8
使用时钟进行srand,由于每次时间不一样,不可能得到相同的序列,除非你用错种子,是time而非clock。
2013年06月12日 13点06分 6
这两者的区别是……
2013年06月12日 14点06分
time(NULL)是当前时间,这一秒和上一秒都是不同的。clock是程序运行的时间,运气好的话,你每次都得到相同值。
2013年06月12日 15点06分
level 10
我正在看这个伪随机数rand() [呼~]
2013年06月12日 13点06分 7
level 6
srand 执行一次, 然后反复rand
其实time(NULL);足够了
不满足于秒的话, Windows下可以用API: GetTickCount();
2013年06月12日 16点06分 8
level 13
→_→⑨
换梅森自旋去解决线性同余的问题吧
2013年06月12日 16点06分 9
level 12
只srand一次, 同一个种子生成的当然是一个序列..
2013年06月13日 01点06分 10
1