■74138 / inTopicNo.9) |
Re[8]: リーグ戦のマトリックスロジック(言語は何でも可) |
□投稿者/ ainax (6回)-(2014/12/02(Tue) 21:52:13)
|
■No74129 (ぼぼ さん) に返信
間違っててすみませんでした。
きちんと調べて C# ですが、組んでみました。
static void Main(string[] args)
{
const int TEAM_COUNT = 8; // 2 の倍数以外では未検証です。
int[] cell = new int[TEAM_COUNT];
cell[0] = TEAM_COUNT;
for (int round = 1; round < TEAM_COUNT; round++)
{
Console.WriteLine("Round {0}", round);
for (int team = 1; team < TEAM_COUNT; team++)
{
cell[team] = (round + team) % (TEAM_COUNT - 1);
if (cell[team] == 0)
{
cell[team] = TEAM_COUNT - 1;
}
}
for (int i = 0; i < TEAM_COUNT / 2; i++)
{
Console.WriteLine("\tTeam{0} vs Team{1}", cell[i], cell[TEAM_COUNT - i - 1]);
}
}
Console.ReadKey();
}
/* 結果
Round 1
Team8 vs Team1
Team2 vs Team7
Team3 vs Team6
Team4 vs Team5
Round 2
Team8 vs Team2
Team3 vs Team1
Team4 vs Team7
Team5 vs Team6
Round 3
Team8 vs Team3
Team4 vs Team2
Team5 vs Team1
Team6 vs Team7
Round 4
Team8 vs Team4
Team5 vs Team3
Team6 vs Team2
Team7 vs Team1
Round 5
Team8 vs Team5
Team6 vs Team4
Team7 vs Team3
Team1 vs Team2
Round 6
Team8 vs Team6
Team7 vs Team5
Team1 vs Team4
Team2 vs Team3
Round 7
Team8 vs Team7
Team1 vs Team6
Team2 vs Team5
Team3 vs Team4
*/
参考元は英語版 wikipedia です。
http://en.wikipedia.org/wiki/Round-robin_tournament
結果を見て貰うと分かると思いますが、最後のチームを固定し
その他のチームを時計回りに 1 週させています。
(英語の読解とアルゴリズムの反映があっていれば、これで問題ないはず・・・)
# ソース組んでいるとき結構混乱してましたので、
# またまた間違っていたらごめんなさい m( _ _ )m
|
|