Пытался сделать, но ввиду while, долго думает программа и вообще наверное способ мой плохой.
public static void SplitTeamsByGroups()
{
var rnd = new Random();
var groupNumber = 0;
var i = 0;
while (i < TeamsCount)
{
groupNumber = rnd.Next(0, GroupsCount);
if (Groups[groupNumber].Count < TeamsInGroupCount)
{
Groups[groupNumber].Add(Teams[i]);
i++;
}
}
}
TeamsCount = 24
GroupsCount = 6
TeamsInGroupCount = 4
Groups - массив из списков List из 6 элементов
Teams - массив string из 24 элементов
В общем пытаюсь сгенерировать рандомно номер группы и если позволяет размер группы(<4) засунуть туда команду, иногда работает даже, но потом начинает генерироваться постоянно 0,1,2,3 в GroupNumber, а остальные цифры нет, отладчиком пробегался
Может кто подскажет более рациональный способ или с этим что-то сделать можно
Заполните массив числами от 1 до 24 (или 0..23, в общем - номерами команд)
Перемешайте его с помощью алгоритма Фишера—Йетса
для всех i от n − 1 до 1 выполнить
j ← случайное число 0 ≤ j ≤ i
обменять местами a[j] и a[i]
Затем каждые 4 последовательных элемента отнесите к соответствующей группе (группа номер i/4)
for (i=0; i<24;i++)
Groups[i/4].Add(A[i]);
Создаем команды
var teams = Enumerable.Range(1, 24).Select(x => $"Team number {x}").ToArray();
Количество групп
var groupCount = 6;
Перемешиваем и группируем
var random = new Random();
var grouped = teams
.OrderBy(x=>random.Next(teams.Length))
.Select((x, i) => (x, i))
.GroupBy(item => $"Group number {(item.i % groupCount)+1}", item=>item.x);
Выводим результат
foreach(var group in grouped)
{
Console.WriteLine(group.Key);
foreach(var team in group)
{
Console.WriteLine($"\t{team}");
}
}
Вывод
Group number 1
Team number 8
Team number 6
Team number 19
Team number 9
Group number 2
Team number 20
Team number 7
Team number 16
Team number 22
Group number 3
Team number 1
Team number 11
Team number 4
Team number 24
Group number 4
Team number 18
Team number 3
Team number 17
Team number 14
Group number 5
Team number 13
Team number 15
Team number 12
Team number 2
Group number 6
Team number 23
Team number 10
Team number 21
Team number 5
Сборка персонального компьютера от Artline: умный выбор для современных пользователей