Welcome

首页 / 软件开发 / C++ / C++:随机生成器 伯努利分布(bernoulli distribution) 详解

C++:随机生成器 伯努利分布(bernoulli distribution) 详解2014-11-16伯努利分布(bernoulli distribution), 是判断某件事情发生或者未发生的概率;

给定参数p, 可以修改概率的值, 发生概率(true)是p,未发生概率(false)是1-p;

随机库, 提供分布对象bernoulli_distribution, 输出bool值, 发生为true, 未发生为false;

伯努利分布, 概率为0.5时, 可以等概率输出一个二元事件, 如先后顺序;

注意: 引擎和分布对象, 声明在函数外, 则每次调用, 都会产生不同的值, 但却是固定的, 可以使用time(0), 定义不同的引擎;

代码如下:

#include <iostream>#include <vector>#include <string>#include <random>#include <algorithm>#include <cmath>using namespace std;bool play (bool first) {std::default_random_engine e;std::bernoulli_distribution b(0.6); //获胜概率较大bool win = b(e);if(first) //我们获胜的概率大return win;elsereturn !win;}int main(){std::string resp;std::default_random_engine e;std::bernoulli_distribution b;do {bool first = b(e); //伯努利生产器std::cout << (first ? "We go first" : "You get to go first") << std::endl; //判断先后手std::cout << ((play(first)) ? "congrats, you won" : "sorry, you lost") << std::endl;std::cout << "play again? Enter "yes" or "no" " << std::endl;} while (std::cin >>resp && resp[0] == "y");return 0;}
输出:

We go firstcongrats, you wonplay again? Enter "yes" or "no" yesWe go firstcongrats, you wonplay again? Enter "yes" or "no" yesWe go firstcongrats, you wonplay again? Enter "yes" or "no"
作者:csdn博客 Spike_King