C++ 输出比赛匹配结果
假设我们有 n 支队伍,我们总是安排实力较强的队伍与实力较弱的队伍比赛,例如让排名第 1 的队伍与排名第 n 的队伍比赛,这种策略是为了使比赛更有趣。现在我们必须找到他们最终的比赛匹配结果,并以字符串的形式表示。
这些队伍以 1 到 n 的正整数形式给出,表示它们的初始排名。因此,排名第 1 的队伍是最强的队伍,排名第 n 的队伍是最弱的队伍。我们将使用括号和逗号来表示比赛队伍配对 - 括号 ('(', ')') 用于配对,逗号 (',') 用于分隔。在每一轮的配对过程中,我们始终必须遵循让实力较强的队伍与实力较弱的队伍配对的策略。
因此,如果输入为 4,则输出将为 ((1,4), (2,3))
为了解决这个问题,我们将遵循以下步骤:
定义一个函数 create(),它将接收 low、high、数组 v2、数组 v1 作为参数。
如果 low >= high,则:
返回
在 v2 的末尾插入 "(" 连接 v1[low] 连接 ", " 连接 v1[high] 连接 ")"
调用 create(low + 1, high - 1, v2, v1)
在主方法中执行以下操作:
定义数组 v1、v2
初始化 i := 1,当 i <= n 时,更新 (i 增加 1),执行:
在 v1 的末尾插入将 i 转换为字符串的结果
当 v1 的大小 > 1 时,执行:
调用 create(0, v1 的大小, v2, v1)
v1 := v2
清空 v2 数组
返回 v1 的最后一个元素
示例
让我们看看以下实现,以便更好地理解:
#include <bits/stdc++.h> using namespace std; class Solution { public: void create(int low, int high, vector <string>& v2, vector <string>& v1){ if (low >= high) return; v2.push_back("(" + v1[low] + "," + v1[high] + ")"); create(low + 1, high - 1, v2, v1); } string findContestMatch(int n) { vector v1, v2; for (int i = 1; i <= n; i++) { v1.push_back(to_string(i)); } while (v1.size() > 1) { create(0, v1.size() - 1, v2, v1); v1 = v2; v2.clear(); } return v1.back(); } }; main(){ Solution ob; cout << (ob.findContestMatch(4)); }
输入
4
输出
((1,4),(2,3))
广告