我知道C中的rand()函数是一个统一的随机分布。 那么如何用probabily生成随机数,例如: 随机200数字范围从-100到100,少于20%的数字是负数。 对不起,我的英文不好
答案 0 :(得分:0)
RAND_MAX
可以提供帮助:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
static int rand_prob(void)
{
int r = rand();
if (r < RAND_MAX / 8) {
return -(r % 101);
} else {
return +(r % 101);
}
}
int main(void)
{
int i;
srand((unsigned)time(NULL));
for (i = 0; i < 200; i++) {
printf("%d\n", rand_prob());
}
return 0;
}
您可以将该功能调整为可重复使用:
static int rand_prob(int percent, int min, int max)
{
int r = rand();
if (r < (RAND_MAX / percent / 10)) {
return -(r % (max - min + 1) + min);
} else {
return +(r % (max - min + 1) + min);
}
}
和main
:
printf("%d\n", rand_prob(80, 0, 100));
答案 1 :(得分:-1)
如果您希望数字中只有80-20个分区,那么您只需从0 - 100
范围内选择 160 数字,然后从 40 数字中选择范围-100 - 0
。
(200%的80%= 160)。