0

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

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

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

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

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

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

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

4

1 回答 1

2

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

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

  • 安给了5个捐赠单位
  • 汤姆捐赠了2个单位
  • 鲍勃没有给任何

结果列表将是:

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

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

弄清楚每次捐赠应该提高他们的几率(增加他们的手数),然后你就可以开始建立你的范围并生成你的数字。

于 2013-04-27T00:49:01.503 回答