全部博文(788)
分类: 敏捷开发
2017-07-08 10:04:59
做个骰子成功几率的分析,投n颗骰子,第一次投成功的几率是a,然后投成功的骰子,需要再投1次,这次成功的几率是b。第二次成功的骰子才算最终成功。
要分析出n颗骰子,最终成功0到n颗的概率。
我写了个算法,求出的结果,合计0到n颗的概率不近似1,而且差别很大,求教各位大大算法有什么错误。
我算法的基本思路:
先统计出第一次投成功0-n颗骰子的概率列表。这步我自认没有问题,合计验算结果近似1
for (var i = 0; i <= n; i++){ FirstSuccessRateTbl.Add(i , Utils.C(n, i)*(decimal)(Math.Pow((double)firstSucessRate,i)*Math.Pow((double)firstLoseRate,n-i))); }
其中Utils.C是我按C概率公式写的函数。FirstSuccessRateTbl用的是哈希表。
然后以第一次成功的概率表作为条件概率统计后一次成功X颗的几率,即累加第一次成功X及X以上颗骰子的情况下第二次投成功X颗的概率。
decimal sucessXRate = 0; for (int i = x; i <= n; i++) { sucessXRate += FirstSuccessRateTbl[i] * (decimal)(Math.Pow((double)secordSucessRate, i)*Utils.C(i,i-x)*Math.Pow((double)secordFailRate,i-x)); } return sucessXRate;
但是按这个算法算下来,2次成功0-n颗的几率合计不为1,不知道错误在哪里。