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

更新於: 2020年11月16日

144 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.