c/C++中随机数的配置
random和rando多可以发生随机数,包括在stdlib.h里。
random函数不是ANSI C尺度,不能在gcc,vc等编译器下编译通过。但在C语言中int random(num)可以这样利用,它返回的是0至num-1的一个随机数。 可改用C++下的rand函数来实现。
1、C++尺度函数库提供一随机数生成器rand,返回0-RAND_MAX之间匀称漫衍的伪随机整数。 RAND_MAX必需至少为32767。rand()函数不接管参数,默认以1为种子(即起始值)。 随机数生成器老是以沟通的种子开始,所以形成的伪随机数列也沟通,失去了随机意义。(但这样便于措施调试)
2、C++中另一函数srand(),可以指定差异的数(无标记整数变元)为种子。可是假如种子沟通,伪随机数列也沟通。一个步伐是让用户输入种子,可是仍然不抱负。
3、较量抱负的是用变革的数,好比时间来作为随机数生成器的种子。 time的值时时刻刻都差异。所以种子差异,所以,发生的随机数也差异。
rand运用问题与解答:
问:为什么有时rand()用它都是同一个数?如何发生一个真正随机数?
答:之所以rand()每次的随机数都一样是因为rand()函数利用不正确。各类编程语言返回的随机数(确切地说是伪随机数)实际上都是按照递推公式计较的一组数值,当序列足够长,这组数值近似满意匀称漫衍。假如计较伪随机序列的初始数值(称为种子)沟通,则计较出来的伪随机序列就是完全沟通的。这个特性被有的软件操作于加密息争密。加密时,可以用某个种子数生成一个伪随机序列并对数据举办处理惩罚;解密时,再操作种子数生成一个伪随机序列并对加密数据举办还原。这样,对付不知道种子数的人要想解密就需要多费些事了。虽然,这种完全沟通的序列对付你来说长短常糟糕的。要办理这个问题,需要在每次发生随机序列前,先指定差异的种子,这样计较出来的随机序列就不会完全沟通了。你可以在挪用rand()函数之前挪用srand( (unsigned)time( NULL ) ),这样以time函数值(即当前时间)作为种子数,因为两次挪用rand函数的时间凡是是差异的,这样就可以担保随机性了。你也可以利用srand函数来工钱指定种子数。Windows 9x/NT的游戏FreeCell就答允用户指定种子数,这样用户假如一次游戏没有乐成,下次还可以以同样的发牌功效再玩一次。
例子:
以下为引用的内容:
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <time.h>
void main()
{
srand( (unsigned)time( NULL ) ); //留意不要放在for轮回里,不然发生的数是同一个数。
for(int i=0;i<100000;i++)
{
cout<<rand()<<endl;
}
}