如何在C#中实现“幸运抽奖”功能?

时间:2011-03-16 18:18:15

标签: c# algorithm random

我正在建立一个电子商务网站(在asp.net& c#中),我想在其中实现“幸运抽奖”功能。控制流程如下: - 用户将购买特定产品在一天,我需要选择那些购买该产品的用户作为当天的幸运抽奖赢家。

我对实现幸运抽奖的初步想法是使用C#提供的随机函数。我脑海里浮现出许多想法......

  1. 如果我只使用c#中的随机函数,效果会如何?
  2. 如果我为此目的实施任何随机数生成算法会更好吗?
  3. 是否有可用于组中随机选择的算法?
  4. 我愿意接受您宝贵的意见和建议。

    感谢
     亚历

3 个答案:

答案 0 :(得分:4)

  1. C#没有随机功能。它使您可以访问.NET库。

  2. 请勿使用Math.Random。请使用.NET BCL提供的其中一个加密RNG。如果你每天这样做一次或两次,加密RNG的额外复杂性将不会成为问题。

答案 1 :(得分:2)

  1. 标准的Random类应该足够了,只需确保每天使用一个独特的种子(比如每个购买数据的哈希值)。如果你的应用程序总是在每天完全相同的时间启动,那么使用time作为种子(调用不带参数的Random构造函数)可能会很糟糕。
  2. 标准的.NET库足以用于统计过程。如果您认为需要更强版本,请使用.NET中的标准RNGCrypto库。除非你每天都有成千上万的买家,否则我认为你真的不需要加密版本。不要自己实现算法。人们使用标准化随机库是有原因的,因为它已经针对随机性的统计要求进行了测试。
  3. 嗯...如果您需要以相同的概率选择几个幸运客户,只需将它们放在List上,生成一个介于0和List长度之间的整数。您获得的整数是第一个幸运客户,将其存储在某个地方,将其从列表中删除,冲洗并重复下一个幸运客户。 如果您需要根据购买计数提供更高的概率,请将购买详细信息存储在列表中,而不是客户。如果您根据购买价值需要自定义重量,请使用Fitness proportion,其中您计算当天的所有购买价值,然后为每位客户提供购买时的累计价值。例如,如果当天总共有350美元的销售,第一个购买75美元的顾客获得75,第二个购买20美元的顾客获得95(75 + 20),购买10美元的第三个顾客获得105(95 + 10)等等。然后,选择0和总销售之间的随机整数,幸运的赢家是最低值的客户,该值仍然高于结果整数。从列表中删除第一个获胜者(包括他们的总数和位置),冲洗并重复下一个客户。

答案 2 :(得分:0)

在我看来,它可以选择多少人。如果它只是一个,我会使用Random()或Ben Voigt建议。

如果它更复杂的幸运抽奖,您可能需要组合和排列算法的帮助。