我正在寻找一个算法来创建一个抽奖,其中每个参与者被分配一个随机的一系列数字的票。
每个抽奖有N个参与者,并且应该有相同数量的抽奖票,每个用户一张票。
在抽签之前,用户应该知道她的票号,这样她就可以跟踪抽签,并预测她是否是赢家。
每次抽奖至少有一名获胜者。
有些抽奖者可以有两张或两张以上的中奖票,而每张票只能赢一张。中奖票将从当前的抽奖中删除。
如果有一个以上的中奖票可用,这应该确定之前开始抽奖。
画空白是不可能的。
如何才能产生这样的财产抽奖。或更具体而言:
我们如何生成抽奖号码,以及这样的票,使每个抽奖有一个或(1+N)保证中奖票。我们怎样才能避免空白?
伪码将是很好的,和/或几个指针,也许是众所周知的算法解决类似的问题。
发布于 2016-05-05 23:26:14
如果我明白你想要什么,那么:
create empty list
for 1..N:
do
r = random number
while r in list
add r to list
give ticket with r to person
for number of winners:
r = random element in list
announce r as a winner
remove r from list发布于 2016-05-06 17:57:44
似乎你的问题的难点是在你的评论中,你说你想通过‘绘制’随机个位数并对它们进行梳理来选择获胜的数字。
为了保护胜利者,你必须从一张售票清单中选出一张中奖票。通常情况下,你只需记录一张门票的列表,然后随机选择其中的pick.one,以获得赢家。
然后你就可以一次一个地宣布获胜数字了吗?
但是,如果您想要随机绘制数字,则必须限制可能的结果。即。如果你只卖了1200张票,你只能选择4个号码,而第一个号码只能是1或0等等。
然后,您可能会发现,由此产生的赢数不再是随机的。即。如果你能通过匹配3个号码赢,1和0是很好的选择。
事实上,考虑到这一点,如果您从获奖者名单中选择整个数字,并且允许玩家选择他们的号码,这也适用。
发布于 2016-05-06 18:32:54
在车票上有一系列的号码(如。随机给N个参与者,其中N是一个很低的数目(例如。然后设计一个算法,你可以一次画一个数字,确保你会选出一个胜利者(很可能有几个参与者仍然相信他们能在很大程度上成为胜利者),这是没有意义的。
你不能这么做。
当然,您可以给23位参与者一张票,2,3,4,5,5+n,其中n是参与者的编号。然后画数字1,2,3,4,5,然后画5+x,其中x介于1和参与者数之间。但我怀疑在第二周人们会不会觉得这很有趣。
https://softwareengineering.stackexchange.com/questions/317678
复制相似问题