假设生成0的概率是p,生成1的概率是1-p,则生成01和10的概率相等。
随机生成0、1
int rand_Z_One()
{
int n = rand();
if(n>1000)
return 0;
else
return 1;
}
等概率生成0、1即概率为0.5;
int newRand()
{
int n1 = rand_Z_One();
int n2 = rand_Z_One();
if(n1==0&&n2==1)
return 1;
if(n1==1&&n2==0)
return 0;
return newRand();
}
等概率生成1.。。。n
解法:求出n的二进制表示位数 k;
int NNewRand()
{
int result = 0;
for(int i = 0;i<k;i++)
{
if(newRand()==1)
result=result|1<<i;
}
if(result+1>n)
return NNewRand();
return result+1;
}