9

可能的重复:
用于从每个元素具有不同概率的列表中选择的 C++ 函数

我需要根据我可以定义的概率(0.25、0.50、0.75)随机确定是或否结果(抛硬币的类型)。

因此,例如,我想随机确定是或否,其中是有 75% 的机会被选中。我有什么选择?有没有我可以使用的 C++ 库?

4

4 回答 4

25

您可以使用以下功能轻松实现此rand功能:

bool TrueFalse = (rand() % 100) < 75;

rand() % 100会给你一个 0 到 100 之间的随机数,它低于 75 的概率是 75% 。您可以将 替换75为您想要的任何概率。

于 2012-10-14T18:47:54.940 回答
8

检查 C++11 伪随机数库。

http://en.cppreference.com/w/cpp/numeric/random

http://en.wikipedia.org/wiki/C%2B%2B11#Extensible_random_number_facility

std::random_device rd;
std::uniform_int_distribution<int> distribution(1, 100);
std::mt19937 engine(rd()); // Mersenne twister MT19937

int value=distribution(engine);
if(value > threshold) ...

像这样,然后说所有高于 75 的都是真的,低于的都是假的,或者你想要的任何阈值

rand您实际上可以控制数字生成的属性不同,我也不相信 rand 在其他答案中使用(使用模数)甚至呈现均匀分布,这很糟糕。

于 2012-10-14T18:48:07.633 回答
3

std::random_device或者boost::random如果std::random_device不是由您的 C++ 编译器实现,boost::random则可以使用abernoulli_distribution来生成随机bool值!

于 2012-10-14T18:56:00.793 回答
1
#include <cstdlib>
#include <iostream>
using namespace std;

bool yesOrNo(float probabilityOfYes) {
  return rand()%100 < (probabilityOfYes * 100);
}

int main() {
    srand((unsigned)time(0)); 
    cout<<yesOrNo(0.897);
}

如果您调用yesOrNo(0.75)它将返回true75% 的时间。

于 2012-10-14T18:50:37.027 回答