1.有一个随机数发生器,能以概率p生成0,以概率1-p生成1,问如何做一个随机数发生器
使得生成0和1的概率相等。
int f2()
{
int a, b;
do
{
a = f();
b = f();
}while(a == b);
return (a - b + 1) / 2;
}
2.用上面那个生成0和1的概率相等的随机数发生器,怎样做一个随机数发生器使得它生成
的数在1...N之间均匀分布。
#include <iostream>
#include <math.h>
#include <time.h>
using namespace std;
srand ( time(NULL) );
int qrand()
{
return rand()%2;
}
int TonRand(int n)
{
int array_size;
array_size = log(n)/log(2)+1;
int *p = new int[array_size];
int i;
int score;
do{
score =0;
for (i=0;i<array_size;i++)
{
p[i] = qrand();
}
for (i=0;i<array_size;i++)
{
score+=(p[i]?pow(2,array_size-i-1):0);
}
}
while (score>n||score==0);
return score;
}