11
回答
请教一下刮刮卡中奖概率问题
终于搞明白,存储TCO原来是这样算的>>>   

php程序 :比如我预计参与人数是1000人,共有20个有奖,中奖是随机的,我的思路是弄一个数组1000个长度的数组$arr,980个0,表示未中奖,20个1表示中奖,我用shuffle 把数组打乱,然后在1-1000之间随机取一个值 比如$i

然后取$arr[$i] 的值 来决定是否中奖,

现在问题来了,刮完后 就知道中奖与否,第一个刮卡的中奖概率为20/1000,第二个中奖的概率是多少呢,

如果中奖了,20肯定减去1 那么第二个中奖概率是19/1000还是19/999呢,怎么把中奖概率和程序联系起来呢,

应该每个参与活动这中奖概率是一样的才对(但是不是及时显示中奖与否的结果,而是全抽奖完后统一公布中奖结果,这种才是概率都一样) 现在是刮完后立即知道结果,怎么保证所有参与者中奖概率相同而且不会出现中奖个数超过设置的奖数呢?

<无标签>
举报
hphper
发帖于2年前 11回/2K+阅
共有11个答案 最后回答: 2年前

中奖概率不变啊。 比如某牛饮料,给出的1000个再来一罐的中奖名额。如果这批货有十万,而出售前面两万的时候,把所有的中奖名额售出去了,那后面八万,是改成中奖率是零,还是干脆不卖了?

中奖本来就应该不让消费者知道这一罐能不能中奖,那一罐能不能中奖。 如果十万卖了九万,都没人中奖,那不就变成中奖率100%,就不叫抽奖了。对前面的人也不公平

--- 共有 3 条评论 ---
hphper回复 @小姐_开源不 : 个人刮开只看个人的,谁说能看所有刮开的卡了啊 2年前 回复
开源小姐回复 @hphper : 某饮料也是开罐兑奖啊,你要做个中奖统计公布出来,让后面的人看到中奖率低了就可以不来买了吗? 2年前 回复
hphper这是刮刮卡,刮开了 就出结果了啊 2年前 回复

第一个人中奖概率 20/1000

第二个人 如果 第一个人 不中奖 20/999  如果第一个人中奖 19/999 总中奖率 

(20/1000)*(19/999)+(980/1000)*(20/999) = 0.02

--- 共有 1 条评论 ---
hphper说的我都懂,但怎么把它搞到程序里啊,抽到了之后,程序和 抽奖用户都知道结果 2年前 回复

楼主数学概率没学好吧,我差点带沟里去。。。。。。。要考虑全部啊,第一个人是否中奖,的确影响后面的人,但是 第一个是否中奖,也不是可以确定的,所以概率是 需要叠加的

如果第一个人已经中奖(或者没中奖),成为事实,然后再让其他人抽奖,这时候中奖率变小(或者变大),但是仍然是公平的,因为概率变化是因为不确定因素已经确定。

如果 第一个人 作弊了,比如说知道哪一个是中奖的,或者没中奖的奖票又放回去了,那么不公平。

第3个人 中奖率 更复杂,但是算算应该还是0.02.。。。。。。。。

① 前面2个 都中奖 概率 = 0.02*0.02=0.0004  第3人中奖概率=18/998

②前面2个都不中奖概率 0.98*0.98=0.9604    第3人 20/998

③正好一人中奖概率 0.0392  第3人19/998


计算器 验证正好 0.02

高中数学学过,概率是相等的。
--- 共有 1 条评论 ---
hphper我知道,但是那种情况是 活动发起者不知道 用户是否中奖 现在程序里是用户中奖了,那么奖数得减1 ,概率问题我懂,关键怎么搞到程序里 2年前 回复

楼主概率没学好吧,每个人概率都是相等的

--- 共有 2 条评论 ---
hphper比如现在第一个人 抽奖:php里我是这么写的 定义一个1000长度的数组$arr,里面20个1 980个0 打乱数组,随机取1-1000之间的一个数$i作为键值 取$arr[$i] 看0或者1 来看是否中奖,如果中奖了 那么下一个人刮奖,怎么定义这个数组呢? 不变还是? 2年前 回复
hphper我知道,但是那种情况是 活动发起者不知道 用户是否中奖 现在程序里是用户中奖了,那么奖数得减1 ,概率问题我懂,关键怎么搞到程序里 2年前 回复

引用来自“Finlay”的评论

高中数学学过,概率是相等的。

比如现在第一个人 抽奖:php里我是这么写的  

定义一个1000长度的数组$arr,里面20个1  980个0  打乱数组,随机取1-1000之间的一个数$i作为键值 取$arr[$i]  看0或者1 来看是否中奖,如果中奖了 那么下一个人刮奖,怎么定义这个数组呢?

不变还是?

--- 共有 2 条评论 ---
hphper回复 @曙光soft : 不变,那么有可能抽的奖超过设定的奖项啊,这也不是没有可能的啊,下标往后一个什么意思呀? 2年前 回复
曙光soft不变,数组下标 往后一个,不然重复了 2年前 回复

不会PHP。我是学的c++,不过办法应该一样,1000个数组,980个0,  20个1 当然你也可以 true false 然后 打乱顺序,每一次抽奖 就 读一个 元素。。

第一个人 读 数组[0]  第二个人 读数组[1]  第三个人 数组[2].......以此类推

当然你也可以 用其他顺序,不过需要保证不会重复。。。。


--- 共有 2 条评论 ---
曙光soft回复 @hphper : 不随机不可以吗?键值 按照 顺序。。。只要键值不重复就可以了 2年前 回复
hphper数组每打开页面依次都是随机依次,什么第一个数组[0],第二个数组[1] 我键值随机的呀 2年前 回复
如果要中奖相同,就是大家都一直刮下去的话,我觉得必须要控制奖卷所在的组,比如,把20张放到1000里面,你在第一次发的50张里面放一张有奖品的,然后先发这50张,刮完之后,再发下一个50张,然后依次类推,这样至少保证了前19组的人的机会是均等的。到了最后一组,其实也就无所谓了,最后一张刮出来的时候,后面刮不刮都无所谓了,最差的情况,卖掉了19 * 50 + 1 张。
--- 共有 2 条评论 ---
自由之信回复 @曙光soft : 是的,同意。 2年前 回复
曙光soft数学上这么做不科学,但是 商业是可以,避免意外亏损 2年前 回复

立即知道结果是说要在页面上公布获奖名单吗?

如果只是让抽奖人知道是否中奖的话其实没有关系,就算前20个人把奖全部抽走,但其他人并不知道这一点。等1000张全部卖完再公布最终的获奖名单。我认为概率是个统计学范畴的东西,不能单看个体。

顶部