level 4
今天有人问我要彩票号码,我就随便编了个生成随机数的小程序
……结果随机生成的数列都是等差数列
原理我知道,因为这个程序一旦开始就是按照内部时钟走,只要确定第一个数字的seed之后,后面都是按照伪随机数表来跳,所以生成的都是差值为3的等差数列……
现在唯一想到的解决方法是每个数字生成的时候都暂停一下等待键入enter……
好麻烦……
有什么解决的办法呢
2013年06月12日 08点06分
1
level 13
随机数种子初始化一次还不够么,为什么要每次都初始化……
2013年06月12日 08点06分
4
啊……谢谢,想明白了,该死的思维死角……
2013年06月12日 08点06分
level 4
写完了……我把源代码发一下
想中彩票脱离码农苦海的就拿去用吧……
#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
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 6
srand 执行一次, 然后反复rand
其实time(NULL);足够了
不满足于秒的话, Windows下可以用API: GetTickCount();
2013年06月12日 16点06分
8
level 12
只srand一次, 同一个种子生成的当然是一个序列..
2013年06月13日 01点06分
10