首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

关于随机产生数的有关问题

2013-01-07 
关于随机产生数的问题我知道,用srand(time(NULL))可以使rand()产生随机数,但是在下遇到了一个小小的问题……

关于随机产生数的问题
我知道,用srand(time(NULL))可以使rand()产生随机数,但是在下遇到了一个小小的问题……
先看看这个东东吧……
先说,只用看choose()部分就可以了……

#include"iostream.h"
#include"stdlib.h"
#include"time.h"
#include"stdio.h"
class Ccc
{
private:
int n;
char a[100][10];
public:
void get();
int p1,p2,choose();
void output1(),output2();
};

void Ccc::get()
{
int nn;
cout<<"寝室人数:";
cin>>nn;
n=nn;
for(int i=0;i<n;i++)
{
cout<<"寝室成员"<<i+1<<":";
cin>>a[i];
}
}

int Ccc::choose()
{
srand(time(NULL));
return(rand()%n);
}

void Ccc::output1()
{
p1=choose();
do{p2=choose();}
while(p1==p2);
cout<<"最聪明的是"<<a[p1]<<endl;
cout<<"最笨的是"<<a[p2]<<endl<<endl;
}

void Ccc::output2()
{
p1=choose();
do{p2=choose();}
while(p1==p2);
cout<<"最帅(漂亮)的是"<<a[p1]<<endl;
cout<<"最丑的是"<<a[p2]<<endl<<endl;
}

void main()
{
Ccc c;
c.get();
cout<<endl<<"****************************************************************"<<endl;
cout<<"我已经计算好了,想知道答案吗?(y/n)";
char ans;
cin>>ans;
if(ans=='n')return;
cout<<endl;
c.output1();
cout<<endl;
c.output2();
getchar();
}

好吧,我承认这是我实在是无聊得没事干的时候写的玩的,这里面“最笨的”和“最帅的”总是同一个人。
我不明白,明明用time()做了种子还是会出现重复……
另,我还试过用rand()产生一个规定范围的数组,再用rand()产生随机下标,然后返回数组中对应的值,但是还是不能解决问题……
注:本人新手,太过专业的术语看不懂,可以大概讲一下,然后我自己去找资料充电~~~~
求高手教导!!!!!!
预览的时候突然想起另一个:二维数组怎么定义成“a[][10]”这样,然后根据需要给下标。就像一位数组中“int *a;a=new int[10];”这样~~~
[解决办法]
一种可能的原因是:time函数的精度是秒一级,而程序运行的速度很快,导致两个time是一样的
[解决办法]
srand(time(0)); //试试
[解决办法]
srand初始化随机数种子,这个函数只需调用一次即可,建议放在构造函数中,如:
public:
    Ccc();

Ccc::Ccc()
{
   srand(time(NULL));
}

然后在choose函数中,只需要一句:
int Ccc::choose()
{
    return(rand()%n);
}

热点排行