只要你的种子相同,它每次产生的序列都是一样的

来源:百度知道 编辑:UC知道 时间:2024/09/22 17:24:05
rand()用一次会产生一个随机数,为什么上面说是“产生的序列”
这个序列是怎么来的?和我用rand()得到的随机数有什么关系?

其实rand()的原理是这样的。
先设置一个种子,srand(seed),如果你没有设置,程序会自动设置,有可能是一个固定的值,也可能是系统时间。具体看是什么语言。
当第一次计算rand的时候,它用seed的值带入一个公式产生一个值,并将这个值或者这个值的一部分返回给你。再次调用,在公式中带入上次产生的值。这样反复迭代,就是一个序列。所以,如果种子是相同的,那么你得到的随机数是什么取决于你第几次调用rand()。
下面是vc的实现方法,如果能看懂就很容易明白了。
void srand(unsigned int seed)
{
holdrand = (long)seed;
}
int rand()
{
return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
}

就是你不断的调用rand()所产生的一组数据所形成的序列。

你说的是srand吧,
srand函数是随机数发生器的初始化函数,原型:
void srand(unsigned seed);
它需要提供一个种子,如:
srand(1);
直接使用1来初始化种子。
不过常常使用系统时间来初始化

例如:
随机输出十个0-100之间的整数
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void main( void )
{
int i,k;
srand( (unsigned)time( NULL ) );
for( i = 0; i < 10;i++ )
{
k=ran