看下面代码,用于生成随机数
1
2
3
4
5
6
7 |
int main(){ cout<< "rand() traps by Sparkles." <<endl;<br> int
N = 10; for
( int i = 0; i < N; ++i) cout<< rand ()%n; getchar (); return
0; } |
结果如下:
似乎并没有什么异常,但是,如果多次运行程序,会发现,每次生成的结果都是一样的。
这个问题网上解释很充分,另见:http://www.cplusplus.com/reference/cstdlib/rand/
randint rand (void);Generate random numberReturns a pseudo-random integral number in the range between
0
and RAND_MAX.
This number is generated by an algorithm that returns a sequence of apparently non-related numbers each time it is called. This algorithm uses a seed to generate the series, which should be initialized to some distinctive value using function srand.
上文提到,rand()算法是由一个seed来生成随机数的,可以通过srand()来定义这个seed。而一开始的例子中,并未调到srand(),所以rand()默认将1作为seed来生成随机数。(狗屎的节奏哇)
下面是通过设置seed来生成随机数,可以看到,当seed不同的时候,随机数结果会变化,最后一种将seed设置成time(0)是网上比较通用的做法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 |
int main(){ int
N = 10; cout<< "rand() traps by Sparkles." <<endl; cout<< "Set seed as 1\t\t\t" ; srand (1); for
( int i = 0; i < N; ++i) cout<< rand ()%N; cout<<endl<< "Set seed as 2\t\t\t" ; srand (2); for
( int i = 0; i < N; ++i) cout<< rand ()%N; cout<<endl<< "Set seed as current time\t" ; srand ( time (0)); for
( int i = 0; i < N; ++i) cout<< rand ()%N; getchar (); return
0; } |
C++随机数生成函数rand()陷阱,布布扣,bubuko.com
原文:http://www.cnblogs.com/sparkles/p/3648519.html