首页 > 解决方案 > 如何在 C# 中均匀地共享随机数

问题描述

我正在考虑在不同数量的人之间共享固定数量的 32 个团队。

当然,32 可能并不总是整除,但为了这个练习,假设我希望在 4 人之间共享 32 个团队,因此每人最多 8 个团队。

int max = 32 / numb;

foreach (string value in wcteams)
{
    //Assigning teams to players
    int selection = random.Next(0, numb);

    int[] counter = new int[max];
    counter[selection] = counter[selection] + 1;

    if (counter[selection] < max)
    {
        Console.WriteLine(inputtedNames[selection] + " has drawn " + value);
    }                    
}

现在,我可以运行该代码,我会得到一份随机选择的人员及其团队的列表。但限制不会实施,一些球员最终会比其他球员拥有更多的球队。

我了解以下代码:

counter[selection] = counter[selection] + 1;

无法将用户收到的团队数量相加,我是否在正确的轨道上计算随机选择玩家的次数,或者我应该采用其他方法吗?

标签: c#arraysrandomcountcounter

解决方案


您的代码中的一个问题是您正在循环内初始化计数器。如果 count[selection] > max 会发生什么?你离开团队,不要把它分配给其他人。

试试下面的代码。

int numb = 4;
int max = 32 / numb;
int[] counter = new int[max];
foreach (string value in wcteams)
{
    bool selectionComplete = false;
    while(!selectionComplete)
    {
        int selection = random.Next(0, numb);
        counter[selection] = counter[selection] + 1;

        if (counter[selection] <= max)
        {
            selectionComplete = true;
            Console.WriteLine(selection + " has drawn " + value);
        }  
    }                      
}

推荐阅读