0

我的比赛有两个阶段,小组+单淘汰。小组赛结束后,每组的x名进入单淘汰赛(括号格式)。在括号阶段有两个基本规则:

  • 一个小组的获胜者不应与另一组的获胜者进行比赛(仅与第 2 或第 3 名比赛)
  • 同一组中的两支球队不应该相互匹配。

例如,如果我们有两个这样的组:

Group A -> 1ºA, 2ºA, 3ºA, 4ºA

Group B -> 1ºB, 2ºB, 3ºB, 4ºB

并且每组的所有团队都进行,淘汰赛应该是:

1ºA vs 4ºB
2ºB vs 3ºA
1ºB vs 4ºA
2ºA vs 3ºB

我正在寻找一种算法来帮助我按该顺序创建淘汰赛。

为了澄清,另一个例子:

如果我们有四个这样的组:

Group A -> 1ºA, 2ºA, 3ºA, 4ºA   
Group B -> 1ºB, 2ºB, 3ºB, 4ºB
Group C -> 1ºC, 2ºC, 3ºC, 4ºC
Group D -> 1ºD, 2ºD, 3ºD, 4ºD

淘汰赛应该是:

1ºA vs 4ºD
2ºB vs 3ºC
1ºC vs 4ºB
2ºD vs 3ºA
1ºB vs 4ºC
2ºA vs 3ºD
1ºD vs 4ºA
2ºC vs 3ºB

谢谢。

4

1 回答 1

-1

在 PHP 中这很简单.. 你只需得到第二个数组的长度,然后倒数键。请注意,几乎在任何语言中,逻辑都是相同的,只是语法略有不同,具体取决于语言。JS、Python、PERL、Java 等应该看起来大致相同。

<?php

$group_a = array();
$group_a[0] = '1';
$group_a[1] = '2';
$group_a[2] = '3';
$group_a[3] = '4';

$group_b = array();
$group_b[0] = '1';
$group_b[1] = '2';
$group_b[2] = '3';
$group_b[3] = '4';

// If team counts don't match, stop program
if ( count($group_a) != count($group_b) ){
    die("Group team counts do not match");
}

// Set key to group b array count
$group_b_key = count($group_b);

foreach($group_a as $item){
    // count backward from 4 ( 4-1 = 3 )
    $group_b_key --;
    echo "$item-A  vs  " . $group_b[$group_b_key] . "-B\n";
}

这应该输出:

1-A  vs  4-B
2-A  vs  3-B
3-A  vs  2-B
4-A  vs  1-B
于 2021-11-18T18:23:13.100 回答