C++ 中的最后一场 NBA 比赛配对

2025 年 5 月 24 日 | 4 分钟阅读

将返回一个 字符串,表示 n 支球队的最终比赛配对。球队排名从 1 到 n,排名 1 是最好的球队,排名 n 是最差的球队。标签对应于球队的初始排名。

配对过程使用逗号“,”和括号“(”和“)”表示球队配对。球队在括号中配对,比赛配对之间的分隔由逗号表示。该方法确保在整个配对过程中,强队与弱队配对。

限制: n 必须始终是公式 n=2^x 中的 2 的幂,其中 x 介于 1 和 12 之间。

方法

  • 在字符串向量中,使用从第一个未匹配到最后一个未匹配的逻辑,将每个初始配对(包括其括号和逗号)记录到不同的行中。
  • 然后以减半的大小运行递归代码,从而完成相同的任务,而无需将 int 转换为字符串。
  • 每一轮都会将球队数量减半。因此,当大小为 1 时,我们达到基本情况并返回,不再进行进一步修改。

解决问题的步骤

  • 为了将 数组 中的匹配项组合成一个字符串,创建 mergingMatches() 方法。
    1. 如果 (n == 1) 只有一个匹配项,则返回。
    2. 通过从 0 到 n / 2 迭代地组合匹配项的前半部分和后半部分。将两支球队都包含在每个匹配字符串中。
  • 使用更新后的匹配项数组和 n / 2 递归调用 mergingMatches()。
  • 创建函数“findingContestMatch()”:函数 要求 n 为球队数量。
    1. 创建一个空数组 mat_ches[] 来存储初始匹配集。
    2. 应将初始匹配项添加到 mat_ches[] 数组中。每个匹配项都由一个包含相关球队号码的字符串表示。
    3. 为了将所有匹配项组合成一个,将 mergingMatches() 与匹配向量和 n / 2 一起使用。

输入:n = 4

输出:“((1,4),(2,3))”

解释:在第一轮中,为了创建一支强队和一支弱队,我们配对了球队 1 和 4,以及球队 2 和 3。我们得到了 (2, 3) 和 (1, 4)。

为了确定第二轮的最终胜者,我们必须在 (1, 4) 和 (2, 3) 的胜者之外加上括号。我们得到了最终的答案 ((1,4),(2,3))。

示例

让我们举一个例子来说明 C++ 中的 NBA 决赛配对。

输出

Please enter the number of teams: 32
The final contest match:
(((((1,32),(16,17)),((8,25),(9,24))),(((4,29),(13,20)),((5,28),(12,21)))),((((2,31),(15,18)),((7,26),(10,23))),(((3,30),(14,19)),((6,27),(11,22)))))   

说明

  • 此 C++ 代码使用递归合并方法为给定数量的球队生成最终比赛配对。
  • 直到只剩下一个匹配项,即最终比赛匹配项,mergingMatches 方法会重复组合相邻的匹配对。
  • findingContestMatches 函数通过将总球队数量除以二来生成初始匹配对。每个匹配项由括号中包含的两个球队号码组成。
  • 为了更轻松地生成匹配对,to_string 函数将整数球队号码转换为字符串,以便与括号进行连接。
  • 当用户输入球队数量时,会使用 findingContestMatches 方法,它使用该数量来确定最终比赛匹配项。
  • 当用户显示计算出的最终比赛匹配项时,生成和呈现匹配配对的过程就完成了。