[高手指点] 美团网的抽奖是什么原理?

2014-10-18 08:33:10 +08:00
 zoneself
在网上搜了下,找到是这样的解释的:
参与美团网的抽奖,
会得到一个类似“459599”的抽奖号,
抽奖规则如下:

中奖号码计算办法
开奖日收盘时的上证指数 × 收盘时的深证成指 × 10000 = 12位数。(指数以证交所公布数字为准);
将此12位数的数字倒序排列后(如首位是0,则直接抹去),再除以截止至开奖日前一天23:59:59参加本次活动的人数(每个抽奖号为一个人数),得到的余数加1即为本次活动的最终获奖号码。
如果当天需要开多个奖,则用此号码分别+2011 +3011 +4011……得出当天其他获奖号码。
如果活动期间抽奖号码加值后超过了前一天的抽奖人数,则顺延至次日参加抽奖的抽奖号码
如果开奖最后一天抽奖号码加值后抽奖号码超过了总参加人数,则将抽奖号码减去参加人数得到新的抽奖号码。
若您的“抽奖号”与最终获奖号码完全一致,就可以获得本次活动的大奖啦!

例如
2012-08-28收盘时的上证指数是 2927.08,
2012-08-28收盘时的深证成指是 12926.61,
将这两个数字相乘后再乘以10000得到的12位数为378372215988,
将这12位数的数字倒序排列得到889512273873。
如果截止至2012-08-27 23:59:59活动结束时的抽奖人数为1907899,
以889512273873整除以1907899,商为466226,余数为154699,
用154699+1=154700,获奖即为154700,如果当天需要开多个奖,则用此号码分别+2011 +3011 +4011……得出当天其他获奖号码。

这个抽奖规则美团抽奖页面中也是公开的,最近要做一个抽奖的程序,需要模仿美团网的这个规则,那么问题来了:
1、美团网的这个中奖号码是如何产生的,怎么保证最后算的这个结果就一个在我产生的中奖号码里?
2、这个算法公平吗?美团搞一个抽奖的活动会有那么多人参加,抽奖号范围很大,如果我们要搞活动人很少,几十个的话,最后算出的结果不在参加人的中奖号里,到那时就完鸟,木有一个人中奖。美团的大部分抽奖我每次都抽,没中过一次,表示怀疑,是不是也会出现这种情况,如果出现这个情况就内定一个,哈哈,这样就没有公平性了吧?
6487 次点击
所在节点    程序员
10 条回复
skydiver
2014-10-18 08:57:28 +08:00
算法里不是取模了么,怎么可能不在范围里
zoneself
2014-10-18 09:04:06 +08:00
@skydiver 抱歉,第一个问题没写清楚,我的意思是 [ 会得到一个类似“459599”的抽奖号] 这里的这个459599是怎么产生的,怎么让中奖结果怎么在产生的随机号的范围内,中奖结果是有规则的,是可以算出来的。
gamexg
2014-10-18 09:06:42 +08:00
顺序生生呗,第一个是1,第二个就是2了。
zoneself
2014-10-18 09:11:06 +08:00
@gamexg 那么疑问就到了第二个问题了,美团搞活动知名度大的,好几十万人参加,而我们的活动人少,只有几十人,最多几百人,比如这期经过规则算出来的结果是:154700 递增出来的最多到几百,不会到这么大的数字呢。
oa414
2014-10-18 09:18:47 +08:00
@zoneself

如果截止至2012-08-27 23:59:59活动结束时的抽奖人数为1907899,
以889512273873整除以1907899,商为466226,余数为154699,
用154699+1=154700,获奖即为154700,如果当天需要开多个奖,则用此号码分别+2011 +3011 +4011……得出当天其他获奖号码。


你们的抽奖人数少,那就

以889512273873整除以你们的抽奖人数,假设为100,商为8895122738,余数73.

73 + 1 = 74. 获奖既为74
livelazily
2014-10-18 09:33:36 +08:00
取余了所以总会少于总抽奖人数
gamexg
2014-10-18 10:27:02 +08:00
楼上已经说的很清楚了。
楼主是觉得数字小不好看还是觉得 154700 对不上你们的抽奖数?
154700 是根据人数算出来的啊,你的抽奖人数少,算出来的154700 就小。

>>再除以截止至开奖日前一天23:59:59参加本次活动的人数(每个抽奖号为一个人数),得到的余数加1即为本次活动的最终获奖号码。
zoneself
2014-10-18 10:33:52 +08:00
@oa414 @livelazily @gamexg 嗯,谢谢,明白啦,另求:php抽奖算法,比如运用大乐透开奖号码来制订规则,有没有好的建议?
dsgygb
2015-01-10 16:13:25 +08:00
@zoneself 您最后是怎么处理的呢?我这边目前也有这个需求。
zoneself
2015-01-14 09:00:22 +08:00
@dsgygb 哎,悔恨当初数学没学好,除数除以被除数取余数,余数肯定小鱼被除数的,是在可控范围内的。你可以找几个数字算一下呵呵,要是数学学好了,我就没有这么多的疑问啦。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/139712

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX