一个抽奖的代码引发的概率问题

今天评审同事的一个抽奖代码,需求简单描述如下设置奖品及其概率如下同事的代码如下这个代码我一眼就觉得不对劲,因为这个逻辑可能会多次生成随机数,我给出了生成一次随机数的解决方案,如下在公司附近的小公园溜达,又想到同事的这个逻辑,觉得虽然他的性能

今天评审同事的一个抽奖代码,需求简单描述如下

设置奖品及其概率如下

同事的代码如下

Award[] awrads = {A, B, C};for (i=0; i<3; i++) {    int lucky = ThreadLocalRandom.current().nextInt(100);    if (lucky < awards[i].odds){        return awards[i]    }}

这个代码我一眼就觉得不对劲,因为这个逻辑可能会多次生成随机数,我给出了生成一次随机数的解决方案,如下

Award[] awrads = {A, B, C};int offset = 0;int lucky = ThreadLocalRandom.current().nextInt(100);for (i=0; i<3; i++) {    if (lucky < awards[i].odds + offset){        return awards[i]    }    offset += awards[i].odds}

同事表示同意

吃完午饭, 在公司附近的小公园溜达,又想到同事的这个逻辑,觉得虽然他的性能可能会差点,但并不影响抽奖结果

这就有点反直觉了, 我使劲回忆当年大学里学过的概率论知识,越想越觉得他的逻辑好像没有问题

按我的算法,用户中奖概率是 (2 + 3 + 5)% = 10%,而他的算法,概率是 2% + 3% + 5% = 10%

不过我又设想了一种场景,推翻了上面的结论

奖品设置为 A = 50%,B = 50%易语言抽奖程序源码,那么按我的算法,用户一定能中奖;而按他的算法,用户即便抽 2 次,也不能保证中奖

所以,他的算法的实际中奖概率应该是 2% + ( 98% * 3%) + ( 95% * 5%)易语言抽奖程序源码,降低了用户中奖概率,而不仅仅是性能问题

本文到此结束,希望对大家有所帮助。

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至81118366@qq.com举报,一经查实,本站将立刻删除。发布者:简知小编,转载请注明出处:https://www.jianzixun.com/93924.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫

相关推荐

软文友链广告合作联系站长qq81118366