1. rand()一般返回约15个随机位。用该函数实现bigrand(),和randint(l,u) 要求前者至少返回30个随机位,后者返回【l,u】范围内的一个随机整数。
int bigrand()
{
return RAND_MAX*rand()+rand();
}
int randint(int l,int u)
{
return l+bigrand()%(u-l+1);
}
2.在0——n-1范围内选择m个整数,在该范围内随机选择一个数i,然后输出i~i+m-1(有可能会绕回到0)。每个整数的概率都是m/n,但特定子集的选择概率明显偏大?
8.如何从0~n-1中随机选择m个整数,使得最终的输出顺序是随机的?如果允许有重复整数,如何生成该列表?又要求按随机顺序输出。
void gendup(int m,int n)
{
for(int i=0;i<m;i++)
cout<< bigrand()%n;
}
9.如果m接近于n,产生的许多随机数都要被丢弃,能否给出算法,使得最坏的情况下也只是用m个随机数?