使用百分比影响的C语言随机化

4

以下是我的随机生成代码:

int monstername;
monstername = rand() % 3;

但我希望用C语言实现以下需求:输出结果中0占70%,1占20%,2占10%。请问如何实现?


2
下面已经有几个很好的答案了,但你真的应该考虑阅读取模偏差的相关知识。 - Cloud
4个回答

4
int monstername;
int random_var = rand() % 10;

if(random_var < 7) {
    // 0-70%
    monstername = 0;
}
else if(random_var < 9) {
    // 70-90% here
    monstername = 1;
}
else {
    // 90-100% here
    monstername = 2;
}

3

尝试

int monstername;
int rn = rand();

if (rn < 0.7*RAND_MAX)
    monstername = 0;
else if (rn < 0.9*RAND_MAX)
    monstername = 1;
else
    monstername = 2;

2
假设你不关心模数偏差,你想要类似以下的内容:
int monstername;
int r = rand() % 10;

if (r < 7)
    monstername = 0;
else if (r < 9)
    monstername = 1;
else
    monstername = 2;

如果您关心模数偏差,请考虑使用 arc4random_uniform(3) 而不是 rand(3)

1
int weighted[10] = {0,1,0,0,1,0,0,2,0,0};
monstername = weighted[rnd() % 10];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接