以概率生成C中的随机数

时间:2018-04-14 09:13:33

标签: c

我知道C中的rand()函数是一个统一的随机分布。 那么如何用probabily生成随机数,例如: 随机200数字范围从-100到100,少于20%的数字是负数。 对不起,我的英文不好

2 个答案:

答案 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)。