来看看这样的中奖算法有没有 bug?

2018-12-27 16:04:42 +08:00
 toou123

每个参与者给一个序号作为抽奖码。最终抽 6 个中奖号码。需求就是公平,无法暗箱操作,中奖号码均匀分布

现在的算法是这样的

a=某日的上证指数收盘数字
b=(总参与人数除以 6 )取商
c=(总参与人数除以 6 )取余数

第一中奖号码=( a*100 )^2 除以( b+c )取余数+1
第二中奖号码=第一中奖号码+b
第三中奖号码=第二中奖号码+b
第四中奖号码=第三中奖号码+b
第五中奖号码=第四中奖号码+b
第六中奖号码=第五中奖号码+b

2356 次点击
所在节点    问与答
10 条回复
zqqian
2018-12-27 16:20:07 +08:00
不应该除以 b+c
应该除以一个质数
swulling
2018-12-27 16:21:30 +08:00
用 Python 的 random choice 就好了,拿上证指数作为种子

何必自己写
whileFalse
2018-12-27 16:31:41 +08:00
不合理。

举个例子:
( a*100 )^2 的尾数只能是 1,3,4,5,6,9,不可能为 0,2,7,8
如果 B+C=10,则无论 a 为任何值时,序号尾号 1,3,8,9 的人都不可能中奖。
across
2018-12-27 16:32:05 +08:00
如果硬要说有缺点,那就是后续中奖号码?
因为第一个发出去后,结果就出来了。反正和你相邻的中奖了,后面就知道判断不用得开奖就可以回去睡觉了。
发奖号码估计是真·手动随机发吧。
whileFalse
2018-12-27 16:33:58 +08:00
@across 这倒有可能是个需求。比如不希望一个部门拿到一堆奖,其他部门拿不到。
546669204
2018-12-27 16:42:02 +08:00
把历年的上证收盘价导出 写了一个测试
在固定人数的情况下 中奖的永远是那么几个 部分号码不会得奖。
https://jsfiddle.net/wkuyzc3d/
lance6716
2018-12-27 17:36:45 +08:00
第一眼看到的漏洞就是均匀分布不是强行均匀啊……
yurang
2018-12-27 17:48:36 +08:00
- 随机数的性质:
- 随机性:不存在统计学偏差,是完全杂乱的数列(弱伪随机数)
- 不可预测性:不能从过去的数列推测出下一个出现的数(强伪随机数)
- 不可重现性:除非将数列本身保存下来,否则不能重现相同的数列(真随机数)
xiaochocking
2018-12-27 17:53:06 +08:00
均匀分布是。。? 真随机还怎么均匀
geelaw
2018-12-27 19:01:06 +08:00
乱编一个算法不像是能满足要求。

一个很明显的错误在于这几个号码不独立。

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

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

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

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

© 2021 V2EX