【问题标题】:Influenced randomization影响随机化
【发布时间】:2013-04-21 06:10:33
【问题描述】:

真的很抱歉,我会搜索我的问题,但我不知道如何正确表达,我的心算有一个很大的问题,我一直在想一个解决方案。我正在尝试为我的公会构建一个程序,将名称添加到列表中。这个列表对于每个条目都有一个并行结构,其中包含该人的姓名和对抽奖的捐赠数量。

我想对所有名字进行随机化,并让结果受到人们投入的捐款数量的积极影响。喜欢增加 1% 或 1% 的可能性 * 捐款数量。我以前做过随机化,但我从来不需要稍微影响几率。请帮帮我?我会发布代码,但当时我没有任何随机化。不过我可以给你一些其他的东西:

我制作了一个结构来保存每个用户的条目:

    public struct pEntry
    {
        public string Name;
        public int Entries;
    }

我做了一个列表来保存所有条目:

    public List<pEntry> lEntries = new List<pEntry>();

我希望我的随机化能够受到他们所做的条目(捐赠)数量的积极影响。这对它可以走多高没有上限,但如果我需要,也许我可以让它像.. 255.它随机化后会选择显示一条消息,说明该用户赢了,它将从列表中删除该条目并选择更多。该程序将用于多次抽奖等类似活动,但都使用相同的系统。

【问题讨论】:

  • 为什么不只是一个字符串列表;买两张票的人会被列入名单两次。如果他们买了三张票,他们就会被列入名单三次。然后只需从列表中选择一个随机项目。毕竟,这就是它与真正的纸质门票的实际运作方式。
  • 如果你需要一些快速而肮脏的东西,你可以为他们所做的每个条目添加一个进入临时数组。然后您可以随机化该集合的索引。编辑:@EricLippert 打败了我 =)
  • 还要注意,如果这里有大笔资金,那么您应该使用加密安全的随机源。 Math.Random 生成的“随机”数字实际上是高度可预测的;它们只是伪随机的。
  • 哈哈,你们太棒了。是的,我想我过于复杂了,我会尝试一个唯一的 UID 以避免重复。谢谢你,我真的很感激:)
  • 这个问题的措辞听起来好像每个人都有一个基本的获胜“机会”(即免费彩票),他想根据捐款的大小来产生奖金机会,但不是这样捐赠 10 个单位的人将获得 11 次机会(即 1 张免费票和 10 张奖励票)。但他需要确定捐赠的金额究竟有多大,才能增加计算出他需要的数学的机会。

标签: c# .net list random probability


【解决方案1】:

您需要知道多少捐款会增加获胜的机会。 1 = 1 的机会比没有捐赠的人多吗?一旦你有了一个基数和一个奖金,你就可以生成一个“图表”,看看你的最高数字是多少,然后生成一个随机数。之后,您可以删除该人或按您想要的任何分数重置他们的机会,重新生成您的机会列表,并生成一个新数字。

例如,如果您希望 1 个捐赠单位为该人提供 10% 的机会,那么您可以生成所有公会的列表,每个人获得 10 个“手” + 每个捐赠单位 1 个手。所以如果你有 3 个人,在哪里:

  • 安捐赠了5个单位
  • 汤姆捐赠了 2 个单位
  • Bob 没有给任何东西

结果列表将是:

  1. 安手数:10(基础)+ 5(捐赠)= 15 手
  2. 汤姆手数:10(基础)+ 2(捐赠)= 12 手
  3. Bob 手数:10(基本)+ 0(无捐赠)= 10 手

然后您生成一个介于 1 和 37 (15 + 12 + 10) 之间的数字来确定获胜者。

找出每笔捐款应该提高他们的几率(增加他们的手数),然后您就可以开始建立您的范围并生成您的数字。

【讨论】:

    猜你喜欢
    • 2021-07-11
    • 2014-05-08
    • 2011-12-27
    • 2014-03-18
    • 2013-01-14
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多