文章目录
一、题目描述
二、参考代码
cpp
#include<iostream>
#include<vector>
#include<cstdlib>
using namespace std;
void generateSchedule(vector< vector<int> >& table, int numPlayers, int rounds) {
// 生成比赛日程的函数
for (int i = 1; i <= numPlayers; i++) {
table[1][i] = i; // 初始化第一轮的比赛对阵
}
int matchGroupSize = 1;
for (int round = 1; round <= rounds; round++) {
numPlayers /= 2;
for (int group = 1; group <= numPlayers; group++) {
for (int i = 1 + matchGroupSize; i <= 2 * matchGroupSize; i++) {
for (int j = 1 + matchGroupSize; j <= 2 * matchGroupSize; j++) {
table[i][j + (group - 1) * matchGroupSize * 2] = table[i - matchGroupSize][j + (group - 1) * matchGroupSize * 2 - matchGroupSize];
table[i][j + (group - 1) * matchGroupSize * 2 - matchGroupSize] = table[i - matchGroupSize][j + (group - 1) * matchGroupSize * 2];
}
}
}
matchGroupSize *= 2;
}
}
int calculateRounds(int numPlayers, int rounds) {
// 计算比赛轮次的函数
do {
numPlayers = numPlayers / 2;
rounds++;
} while (numPlayers > 1);
return rounds;
}
void printSchedule(vector< vector<int> >& table, int numPlayers) {
// 打印比赛日程表的函数
for (int i = 1; i <= numPlayers; i++) {
for (int j = 2; j <= numPlayers; j++) {
cout << table[i][j] << " ";
}
cout << endl;
}
}
int main() {
int rounds = 0;
int numPlayers = 0;
cin >> numPlayers;
vector< vector<int> > v(numPlayers + 1, vector<int>(numPlayers + 1)); // 创建比赛日程表的二维数组
rounds = calculateRounds(numPlayers, rounds); // 计算比赛轮次
generateSchedule(v, numPlayers, rounds); // 生成比赛日程表
printSchedule(v, numPlayers); // 打印比赛日程表
return 0;
}