每个参与者给一个序号作为抽奖码。最终抽 6 个中奖号码。需求就是公平,无法暗箱操作,中奖号码均匀分布
现在的算法是这样的
a=某日的上证指数收盘数字
b=(总参与人数除以 6 )取商
c=(总参与人数除以 6 )取余数
第一中奖号码=( a*100 )^2 除以( b+c )取余数+1
第二中奖号码=第一中奖号码+b
第三中奖号码=第二中奖号码+b
第四中奖号码=第三中奖号码+b
第五中奖号码=第四中奖号码+b
第六中奖号码=第五中奖号码+b
1
zqqian 2018-12-27 16:20:07 +08:00 via iPhone
不应该除以 b+c
应该除以一个质数 |
2
swulling 2018-12-27 16:21:30 +08:00 via iPhone
用 Python 的 random choice 就好了,拿上证指数作为种子
何必自己写 |
3
whileFalse 2018-12-27 16:31:41 +08:00 1
不合理。
举个例子: ( a*100 )^2 的尾数只能是 1,3,4,5,6,9,不可能为 0,2,7,8 如果 B+C=10,则无论 a 为任何值时,序号尾号 1,3,8,9 的人都不可能中奖。 |
4
across 2018-12-27 16:32:05 +08:00
如果硬要说有缺点,那就是后续中奖号码?
因为第一个发出去后,结果就出来了。反正和你相邻的中奖了,后面就知道判断不用得开奖就可以回去睡觉了。 发奖号码估计是真·手动随机发吧。 |
5
whileFalse 2018-12-27 16:33:58 +08:00
@across 这倒有可能是个需求。比如不希望一个部门拿到一堆奖,其他部门拿不到。
|
6
546669204 2018-12-27 16:42:02 +08:00 1
|
7
lance6716 2018-12-27 17:36:45 +08:00
第一眼看到的漏洞就是均匀分布不是强行均匀啊……
|
8
yurang 2018-12-27 17:48:36 +08:00
- 随机数的性质:
- 随机性:不存在统计学偏差,是完全杂乱的数列(弱伪随机数) - 不可预测性:不能从过去的数列推测出下一个出现的数(强伪随机数) - 不可重现性:除非将数列本身保存下来,否则不能重现相同的数列(真随机数) |
9
xiaochocking 2018-12-27 17:53:06 +08:00
均匀分布是。。? 真随机还怎么均匀
|
10
geelaw 2018-12-27 19:01:06 +08:00 via iPhone
乱编一个算法不像是能满足要求。
一个很明显的错误在于这几个号码不独立。 |