C ++中的输出竞赛比赛

假设我们有n支球队,并且我们总是安排实力较强的球队与实力较弱的球队比赛,例如让排名1的球队与实力排名第n的球队比赛,这种策略是使比赛更加有趣。现在,我们必须以字符串形式查找他们的最终比赛。

这些团队以从1到n的正整数的形式给出,代表他们的初始排名。因此,排名1是最强的团队,排名n是最弱的团队。我们将使用括号和逗号来表示竞赛团队的配对-括号('(',')')用于配对,逗号(',')用于分区。在每一轮的配对过程中,我们始终必须遵循将强壮的一对与弱壮的一对配对的策略。

因此,如果输入类似于4,那么输出将为((1,4),(2,3))

为了解决这个问题,我们将遵循以下步骤-

  • 定义一个函数create(),将使用低,高,数组v2,数组v1,

  • 如果低> =高,则-

    • 返回

  • 在v2的末尾插入“(” concatenate v1 [low] concatenate“,” concatenate v1 [high] concatenate“)

  • 创建(低+ 1,高-1,v2,v1)

  • 从主要方法中执行以下操作-

  • 定义数组v1,v2

  • 对于初始化i:= 1,当i <= n时,更新(将i增加1),-

    • 插入将我转换为v1末尾的字符串

  • 当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))