新手问C++随机数问题

来源:百度知道 编辑:UC知道 时间:2024/06/17 02:07:15
#include<ctime>
……
srand((unsigned)time(0));
for(int i=0;i<10;i++)
{
ran_num=rand()%6;
cout<<ran_num<<“ ”;
}
(指定seed的值为当前系统流逝了的时间,单位为秒(time_t time(0)))
就能做到完全随机吗?
做为随机数,有可能两次输出的结果一样,这样的程序有可能吗?
这种是伪随机数,在要求不高的情况下可以使用的,
两次输出的结果一样当然是有可能的了。
//如果要求高的话有什么别的好办法吗?

是可能的,如果要得到无重复的随机数,还有进行处理,比如这样
srand((unsigned int)time(NULL));//init random
int temp;
for(int i=0;i<randNumber;i++) //randNumber为产生随机数的个数,你这里是10个
{
int rander = rand()%(length-i);
temp = source[rander];
source[rander] = source[length-i-1];
source[length-i-1] = temp;
}
存放随机数的数组为source,数组长度length(预先定义,这里假设为已经知道),需要得到的不重复数为randNumber个。

你既然是用c++,可以写一个产生无重复随机数的模板类,以后遇到这样的问题的时候直接使用,很方便,
以下提供这个仅供参考:
代码:

template <class Type>
class MyRandom
{
private:
public:
MyRandom()
{
srand((unsigned int)time(NULL));//init random
}
void Rand(Type *source,int length,int randNumber)
{
Type temp;
for(int i=0;i<randNumber;i++)
{
int rander = rand()%(length-i);
temp = source[rander];
s