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))
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP