2012-02-25 67 views
3

我想在不使用增强和“奇怪”的情况下做到这一点,我想随机填充一块板用于生命游戏。如何在C++中使用正态分布生成真值或假值

+3

正态分布是连续的,所以它不产生真/假值。如果你在一些随机值之后,你可能只想使用rand并选择最后一位。不是最好的随机值,但我认为这足够好。 – Joel 2012-02-25 19:16:15

+0

将您给定的正态分布分散以适应网格的单元格。 – 2012-02-25 19:17:37

+1

正态分布适用于身高,体重(连续)等。您需要考虑Bernoulli_distribution(http://en.wikipedia.org/wiki/Bernoulli_distribution) – 2012-02-25 19:32:47

回答

3

只要使用stlibrand()

#include <stdlib.h> 
#include <time.h> 

bool randomBool() { 
    return rand() % 2 == 1; 
} 

int main() 
{ 
/* initialize random seed: */ 
    srand (time(NULL)); 

/* fill up your game board here */ 

} 

要知道,它不会产生完全均匀的效果。为了达到这个目的,你可能必须自己实现一些东西。对于非加密目的,无论如何你可能没问题。

+0

好的,我知道,我会用它xDD – freinn 2012-02-25 19:19:28

+0

当OP的问题是“正常”分布点时,“统一”是一个可以接受的答案? – 2012-02-25 19:22:16

+0

我的老师说这个词“统一”,但谷歌搜索我没有找到功能达到此 – freinn 2012-02-25 19:26:28

1

Boost并不奇怪,它被视为标准并不遥远。 (实际上,它是新标准中新库功能的中坚力量--C++ 11)。所以我不会排除它。

http://www.boost.org/doc/libs/1_49_0/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/normal_dist.html

这样的一个系统外,您将不得不自己实现它更是一个数学底子的问题。

+0

+1来推荐boost,虽然OP不想使用它,但这是一个很棒的库。 – jupp0r 2012-02-25 19:29:07

+0

我想使用它,但有一天我试图安装它,并没有工作,并没有找到好的文档安装和使用它 – freinn 2012-02-25 19:34:50

+0

@freinn它是值得工作,认真。如果你有一个现代编译器,请看我的其他答案。 – 111111 2012-02-25 19:58:58

10

C++ 11,做它用下面的

#include <random> 
#include <vector> 

int main() 
{ 
    std::mt19937 gen; 
    std::bernoulli_distribution  dist; 

    std::vector<bool> bv; 
    bv.reserve(100); 

    for(unsigned i=0; i!=100; ++i) 
      bv.push_back(dist(gen)); 

    return 0; 
} 

此外,我实在不明白均匀和正态分布之间的区别是什么一个布尔值。

在这里查看C++随机数。 http://en.cppreference.com/w/cpp/numeric/random

+0

我们不应该在创建后播种发电机吗? 'std :: mt19937生成器; 发电机。种子(时间(NULL)); std :: bernoulli_distribution distribution;对于(int i = 0; i <10; ++ i){ bool random = distribution(generator); std :: cout << random << std :: endl; }' – 2013-12-04 14:47:26

+1

取决于用户是否确定性序列。如果他们不这样使用'std :: random_device'比'time(NULL)'干净得多' – 111111 2013-12-04 15:02:55

1

我想你会想用C++ 11的均匀分布。你需要#include <random>

std::default_random_engine defaultRandomEngine(std::random_device{}()); 
std::uniform_int_distribution<> uniformDistribution(0, 1); 
for(int i = 0; i < 100; ++i) 
{ 
    std::cout << static_cast<bool>(uniformDistribution(defaultRandomEngine)) << std::endl; 
} 
+0

为什么你不能只用'== 1'? – ailin 2017-11-30 11:38:08

相关问题