Dan*_*son 1 arrays random math generator go
我正在写一个彩票抽奖模拟程序作为一个项目.游戏的工作方式是你需要选择从49中抽取的6个数字才能获胜.
你获胜的机会是1/13,983,816,因为这是49个中有6个的组合.将demo program on Go playground 产生围绕循环下去,每次六个新的号码.
每次生成一组新的数字时,我都会测试它是否已经存在,如果确实存在,我就会突破循环.对于13,983,816种组合,您会认为在相同的6个数字重复之前需要很长时间,但在测试中它总是在10000次迭代之前失败.有谁知道为什么会这样?
在我看来,你有几个问题.
rand.Seed(time.Now().UnixNano())总是产生相同的种子,因为time.Now()它是相同的.关于概率部分:
赢得彩票的可能性确实如此1/C(49, 6) = 1/13,983,816.但这是某人选择已经预定义的数字的概率.例如,你声称你的赢家是{1, 5, 47, 3, 4, 5},现在有人赢得的概率大约是14万分之一.所以你必须做以下事情.随机选择一组6个数字,然后将循环中的新选择与已找到的数字进行比较.
但你要做的是检查碰撞的概率.有N个人中的一些会选择相同的集合(甚至不一定是获胜集合).这被称为生日悖论.正如你所看到的那样,碰撞的概率随着人数N的增加而急剧增加.
这绝对是同样的问题,但你一年中的天数是多少,13,983,816你可以在这里查看,在这个天数里,你只需要5000次迭代就可以保证0.59%你会发生碰撞.通过9000次迭代,您将发现概率为0.94的碰撞.