これを行う 1 つの方法は次のとおりです。
チームに 1..n の番号を付けます。(この例では n=8) すべてのチームを 2 行で記入してください。
列には、そのラウンドでどのチームがプレーするかが表示されます (1 対 8、2 対 7、...)。
1 2 3 4
8 7 6 5
ここで、1 つを固定したまま、他のすべてのチームを (時計回りに) ローテーションします。2週目に、あなたは得る
1 8 2 3
7 6 5 4
そして3週目に、あなたは得る
1 7 8 2
6 5 4 3
これは第 n-1 週まで続きます。この場合、
1 3 4 5
2 8 7 6
n が奇数の場合、同じことを行いますが、ダミー チームを追加します。ダミーチームと対戦した人は誰でも、その週に別れを告げます。
例えば:
1 2 3 4 5
9 8 7 6 0 (0 being the bye)
上記のように回転を続けます。
コード例:
void ListMatches(List<string> ListTeam)
{
if (ListTeam.Count % 2 != 0)
{
ListTeam.Add("Bye"); // If odd number of teams add a dummy
}
int numDays = (numTeams - 1); // Days needed to complete tournament
int halfSize = numTeams / 2;
List<string> teams = new List<string>();
teams.AddRange(ListTeam); // Add teams to List and remove the first team
teams.RemoveAt=(0);
int teamsSize = teams.Count;
for (int day = 0; day < numDays; day++)
{
Console.WriteLine("Day {0}", (day + 1));
int teamIdx = day % teamsSize;
Console.WriteLine("{0} vs {1}", teams[teamIdx], ListTeam[0]);
for (int idx = 1; idx < halfSize; idx++)
{
int firstTeam = (day + idx) % teamsSize;
int secondTeam = (day + teamsSize - idx) % teamsSize;
Console.WriteLine("{0} vs {1}", teams[firstTeam], teams[secondTeam]);
}
}
}
基本的に、これが行っていることは、最初のチームを除くすべてのチームをリストに入れることです。次に、開始時のインデックスを毎日 1 ずつ増やします。注目しているこのチームについて、このチームを Team1 と一致させます。リスト内の次のチームについては、リストの反対側から始まる同じインデックスに一致させますが、最初のインデックス スポットを + 1 として扱います。