概率和随机数

时间:2017-06-22 21:56:33

标签: c++ random probability

我刚开始使用C ++并且正在创建一个简单的基于文本的冒险。我试图弄清楚如何进行基于概率的事件。例如,50%的几率,当你打开盒子时,会有一把剑,有50%的几率成为一把刀。我知道如何制作一个随机数生成器,但我不知道如何将这个数字与某些东西联系起来。我创建了我想要的变体,但它要求用户输入随机数。我想知道如何根据随机数是大于还是小于50来确定if语句,而不是用户输入的数字是大于还是小于50。

2 个答案:

答案 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(),则会生成

  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]++;   
          }
        }
  }

范围内的数字。因此,有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]++;   
          }
        }
  }

对于每种情况,您可以使用任何给定的概率将此扩展到两个以上的不同情况,只需为每种情况定义0..RAND_MAX范围内的适当阈值,例如

#include <stdlib.h>

if (rand() < RAND_MAX / 2)
{
    // sword - 50% probability
}
else
{
    // knife - 50% probability
}