随机数

假如要生成区间[a,b]中的N个随机数,a
假设N=100;
那么
#include //需要这个
#include //这个也要

然后
srand((unsigend)time(NULL));//
int num[100];
int a=100,b=300;// 生成100-300之间的随机数
for(int i=0;i<100;i++)
    num[i]=rand()%(int)(b-a+1)+a; 

这个算法的证明过程
假设A是一个范围很大的随机数,现在要生成区间[a,b]上的随机数,a<=b<=max(A),假设M是一个未知的确定整数
那么A%M的结果在区间[0,M-1]上,为了让这个区间和区间[a,b]重合,必须让区间[0,M-1]在数轴上平移X(X为整数)以后可以和[a,b]重合
因此,必须满足0+X=a,并且M-1+X=b
可以解得a=X,M=b-x+1=b-a+1
所以可以知道A%(b-a+1)可以得到区间[a,b]上的一个数


例1(C语言)
随机输出十个0-100之间的整数
[2]
#include
#include
#define MAX 10
int main( void)
{
int number[MAX] = {0};
int i;
unsigned int seed;
scanf("%d",&seed);
srand(seed);
for(i = 0; i < MAX; i++)
{
number[i] = rand() % 100;
printf("%d ", number[i]);
}
printf("\n");
return 0;
}
例2(C语言)
程序例2:
#include
#include
#include
#define MAX 10
int main( void)
{
int number[MAX] = {0};
int i;
srand((unsigned) time(NULL));
for(i = 0; i < MAX; i++)
{
number[i] = rand() % 100;
printf("%d ", number[i]);
}
printf("\n");
return 0;
}
例3(C++)
#include
#include
#include
using namespace std;
int main()
{
double random(double,double);
srand(unsigned(time(0)));
for(int icnt = 0; icnt != 10; ++icnt)
cout << "No." << icnt+1 << ": " << int(random(0,10))<< endl; return 0;
}
double random(double start, double end)
{ return start+(end-start)*rand()/(RAND_MAX+ 1.0);}

http://baike.baidu.com/view/1458234.htm

你可能感兴趣的:(ACM相关学习)