C语言本身是没有内置加权随机数的函数的,但是C本身带有一个随机数生成函数rand();
实现加权随机数的想法就是,我通过另外生成一个总计100的数组,其中按照概率存放对应的值的数量。通过rand函数进行随机生成若干个0-99的随机数,落点就是我们需要的随机值。可能说得有点绕,直接看代码吧:
假定需要按照 0.1 0.7 0.2 的权重,随机生成一个 4 7 8中的一个数字(当然,要生成多个数字就是多进行几个循环罢了,比如说假定生成N个加权随机数):
int a[100] = { 0 };
int random[N] = { 0 };
float prob[3] = {0.1,0.7,0.2};
//对a根据概率进行赋值
for (int i = 0;i < (int)prob[0]*100;i++) {
a[i] = 4;
}
for (int i = (int)(prob[0]*100);i < (int)prob[1]*100;i++) {
a[i] = 7;
}
for (int i = (int)(prob[1]*100);i < (int)prob[2]*100;i++) {
a[i] = 8;
}
//随机生成N个0-99内的随机数作为下标,访问a进行赋值
for (int j = 0;j < N;j++) {
int k = rand();
random[j] = a[k % 99 + 0];
}
对rand()函数,在使用前,通过更改随机数种子srand()可以实现生成不同的随机数。由于rand的随机方式是伪随机,所以需