【问题标题】:How to Implement 'Lucky Draw' functionality in C#?如何在 C# 中实现“幸运抽奖”功能?
【发布时间】:2011-03-16 18:18:14
【问题描述】:

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

实现抽奖的最初想法是使用 C# 提供的 Random 函数。我脑海中浮现出很多想法,比如..

  1. 如果我只使用 c# 中的随机函数,效果如何?
  2. 如果我为此目的实现任何随机数生成算法会更好吗?
  3. 是否有任何算法可用于从组中随机选择?

我愿意接受您的宝贵意见和建议。

谢谢
亚历克斯

【问题讨论】:

    标签: c# algorithm random


    【解决方案1】:
    1. C# 没有随机函数。它使您可以访问 .NET 库。

    2. 不要使用Math.Random。请使用 .NET BCL 提供的加密 RNG 之一。如果您每天执行一次或两次,加密强度 RNG 的额外复杂性将不是问题。

    【讨论】:

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

      【讨论】:

        【解决方案3】:

        在我看来,它取决于您可以选择的人数。如果它只是一个,我会使用 Random() 或按照 Ben Voigt 的建议。

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

        【讨论】:

          猜你喜欢
          • 2012-06-14
          • 1970-01-01
          • 2020-11-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-19
          • 2011-05-09
          • 2019-03-29
          相关资源
          最近更新 更多