【问题标题】:Dice probability [closed]骰子概率[关闭]
【发布时间】:2013-07-18 22:55:58
【问题描述】:

我正在尝试研究如何使掷骰子应用程序显示每个结果的百分比机会。例如,单个六面骰子将显示:1 = 16.6% 2 = 16.6% 3 = 16.6% 4= 16.6% 5 = 16.6% 6 = 16.6%。

用户将输入骰子的类型(面数 n)和要掷骰子的数量(d)。

有没有人有一个适用于 C++ 的公式?我似乎无法解决/理解到目前为止我能找到的东西。

谢谢

编辑如果可能的话,我也想将结果存储在某种数组中

【问题讨论】:

  • 您是否希望每个骰子能够有不同的面数?
  • 是的,每个骰子可以是 4、6、8、10 或 20 面
  • 这个问题似乎是题外话,因为它是关于数学/概率,而不是编程。
  • 如果骰子用于近战武器,请不要忘记力量统计修正。如果是双手剑,则乘以 1.5。

标签: c++ math dice


【解决方案1】:
void dice_analysis(int dice_sides, int dice_number, float * h2, int precision)
{
     int temp=0;
     int histogram[dice_sides*dice_number];
     //init histogram
     for(int k=0;k<dice_sides*dice_number;k++)
     {
          histogram[k]=0;
     }
     //statistical analysis
     for(int i=0;i<precision;i++)
     {
          temp=0;
          for(int j=0;j<dice_number;j++)
          {

               temp+=( rand()%dice_sides +1 );
          }
          for(int k=0;k<dice_sides*dice_number;k++)
          {
               if(temp==(k+1)){histogram[k]++;}
               //actually histogram[temp]++; look better
          }


     }
     //printing the calculated results
     for(int k=0;k<dice_sides*dice_number;k++)
     {
               cout<<k+1<<":"<<(float)histogram[k]/(precision/100.0f)<<"%"<<endl;
               h2[k]=histogram[k]/(precision/100.0f);
     }


}

dice_analysis(8,2,x,1000) 的输出 ---> 两个 8 面骰子

1:0%
2:1.5%
3:4.4%
4:3.8%
5:5.7%
6:8.8%
7:9.1%
8:10.2%
9:14%
10:10.2%
11:8.3%
12:7.5%
13:6.8%
14:6%
15:2.8%
16:0.9%

您可以看到“1”对于两个或更多骰子是不可能的。此外,“9”最有可能是 %14 的机会。

你可以像这样使用:dice_analysis(8,2,output_array,1000);

【讨论】:

  • 这看起来很完美,除了我尝试使用 1 个 6 面骰子。所有答案都有些不同,但肯定应该是 16.7%?
  • 如果您需要精度,从 1000 增加到 100000 并将直方图除以 1000 而不是 1000。我添加了数组输出版本。
  • 添加了可定制的精度版本。
  • 将输出数组从 int 更改为 float 以获得小于 1%。
  • 这是我的“boss vs hero 双赢概率”函数的一个版本。
【解决方案2】:
std::vector<double> probas;
for(i = 1; i <= num_faces; ++i)
{
    std::cout << i << " = " << 100.0 / num_faces << "%" << std::endl;
    probas.push_back(100.0 / num_faces);
}

编辑矢量素材

【讨论】:

  • 但是我没有考虑到你的玩家对上一个 Boss 的暴击几率提高了 70%
猜你喜欢
  • 2017-11-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 2013-06-12
  • 2013-12-29
  • 1970-01-01
  • 2021-09-23
相关资源
最近更新 更多