我在opengl做了一个Pacman游戏,我需要生成2个不同的数字0或1,这对我的pacman方向负责他的方向负责。
如何使用rand()函数生成一个数字,该函数为一个数字生成75%的随机性,为另一个生成25%的随机性?
如果我做:
n = rand() % 3;
它将获得2个不同的数字。 问题是我不知道如何制作的随机性百分比。我可以用cicle和一个柜台制作它。但我被告知我可以直接在rand()函数中执行它。我搜索但我在谷歌上找不到任何具体内容。
答案 0 :(得分:3)
使用<random>
库。 bernoulli_distribution将以给定的概率p生成true,并且以1-p的概率生成false。
#include <random>
#include <iostream>
#include <algorithm>
#include <iterator>
int main() {
std::generate_n(std::ostream_iterator<bool>(std::cout," "), 10,
std::bind(std::bernoulli_distribution(0.25), std::mt19937()));
}
打印:
1 0 0 1 0 0 1 0 0 0
答案 1 :(得分:2)
rand()为您提供0到RAND_MAX(典型值为32k)之间的随机数
因此,一半的值将介于0和RAND_MAX / 2之间,1/3将介于0和RAND_MAX / 3之间,2/3介于RAND_MAX / 3和RAND_MAX之间。
这是否足以提示?
答案 2 :(得分:2)
您始终可以使用从a
到b
的均匀分布的随机范围,并检查您的条件,如下所示:
if((rand() % 100)>=75)
// 25%
;
else
// 75 %
;