我刚开始使用C ++并且正在创建一个简单的基于文本的冒险。我试图弄清楚如何进行基于概率的事件。例如,50%的几率,当你打开盒子时,会有一把剑,有50%的几率成为一把刀。我知道如何制作一个随机数生成器,但我不知道如何将这个数字与某些东西联系起来。我创建了我想要的变体,但它要求用户输入随机数。我想知道如何根据随机数是大于还是小于50来确定if语句,而不是用户输入的数字是大于还是小于50。
答案 0 :(得分:2)
将剩余运算符%与rand一起使用。 rand()%2可以给你0或1。 让0是剑,1是刀。
如果你还需要一把斧头,那么使用rand()%3。
它可以给你0,1或2.
图2表示轴,0和1表示如上。
那么ifs和elses是显而易见的。
rand()%n其中n是一个大数字,给出较小数字的可能性较高。概率不均匀分布。您可以从stl或boost中查看一些随机数生成器。
答案 1 :(得分:-1)
如果您使用rand()
,则会生成
范围内的数字。因此,有50%的可能性,您可以执行以下操作: signed long max = elements * elements;
int par1 = 0;
int par2 = 0;
unsigned long index;
#pragma omp parallel for firstprivate(par1, par2, index, max, size) shared(histogram)
for (unsigned long x = 0; x < max; x++)
{
par1 = x / elements;
par2 = x % elements;
if(par1 > par2)
{
index = getDistance(par1, par2) / param;
if (index < size)
{
#pragma omp atomic
histogram[index]++;
}
}
}
signed long max = elements * elements;
int par1 = 0;
int par2 = 0;
unsigned long index;
#pragma omp parallel for firstprivate(par1, par2, index, max, size) shared(histogram)
for (unsigned long x = 0; x < max; x++)
{
par1 = x / elements;
par2 = x % elements;
if(par1 > par2)
{
index = getDistance(par1, par2) / param;
if (index < size)
{
#pragma omp atomic
histogram[index]++;
}
}
}
对于每种情况,您可以使用任何给定的概率将此扩展到两个以上的不同情况,只需为每种情况定义0..RAND_MAX
范围内的适当阈值,例如
#include <stdlib.h>
if (rand() < RAND_MAX / 2)
{
// sword - 50% probability
}
else
{
// knife - 50% probability
}