1. 基本问题,怎么产生一个[0..100]的随机数
#include
#include
#include
int main(){
srand((unsigned)time(NULL));
for(int i=0; i<10; i++)
printf("%d/t", rand()%100);
return 0;
}
虽然这是一个伪随机数序列,我做了实验,在10000个样本下,离10.00%的均匀分布有点距离,在100万个样本下已经非常好了。使用标准C++。
2. 怎么随机产生一个有6位数字的字符串(比如做密码、验证码用)?
这有两个方法:
char password[7];
int i,j;
srand(time(0));
for(i=0;i<6;i++)
{
j=rand()%10;
password[i]=j+'0';
}
password[6]='{row.content}';
另一个方法:
int password;
int i,j;
srand(time(0));
for(i=0;i<6;i++)
{
j=rand()%10;
password= j + password*10;
}
//然后把int password转换城字符串就行了
cout<
#include
#include
#include
int main()
{
std::vector ivec(0, 100);
for ( int i=0; i<100; ++i
ivec.push_back(i+1);
std::copy( ivec.begin(), ivec.end(), std::ostream_iterator(std::cout, " " ;
std::cout << "/n/n";
std::vector::iterator it = ivec.begin();
std::vector::iterator it_end = ivec.end();
std::random_shuffle( ivec.begin(), ivec.end() ;
std::copy( it, it_end, std::ostream_iterator(std::cout, " " ;
return 0;
}
4. 再来一个,如何产生符合正态分布的随机数:
/*一般有两种算法:
算法一产生12个(0,1)平均分布的随机函数,用大数定理可以模拟出正态分布。
算法二用到了数学中的雅可比变换,直接生成正态分布,但此算法在计算很大规模的数时
会出现溢出错误。
测试程序:*/
#include
#include
#include
#include
#include
double _random(void)
{
int a;
double r;
a=rand()%32767;
r=(a+0.00)/32767.00;
return r;
}
double _sta(double mu,double sigma)
{
int i;
double r,sum=0.0;
if(sigma<=0.0) { printf("Sigma<=0.0 in _sta!"; exit(1); }
for(i=1;i<=12;i++)
sum = sum + _random();
r=(sum-6.00)*sigma+mu;
return r;
}
double _sta2(double mu,double sigma)
{
double r1,r2;
r1=_random();
r2=_random();
return sqrt(-2*log(r1))*cos(2*M_PI*r2)*sigma+mu ;
}
int main()
{
int i;
double mu,sigma;
srand( (unsigned)time( NULL ;
mu=0.0;
sigma=1.0;
printf("Algorithm 1:/n";
for(i=0;i<10;i++)
printf("%lf/t",_sta(mu,sigma));
printf("Algorithm 2:/n";
for(i=0;i<10;i++)
printf("%lf/t",_sta2(mu,sigma));
return 0;
}
C++各种产生伪随机数的问题
最新推荐文章于 2025-06-02 21:38:29 发布