#include "iostream"
#include "cmath"
using namespace std;
int arr[20][20];
int b[20];
int odd(int n) //如果是奇数,返回1,否则返回0
{
return n&1;
}
void construct(int n)
{
if(n==1) return;
int m = odd(n)?n:n-1; //如果n是奇数,转换为偶数
arr[n][1] = n;
for(int i=1; i<=m; i++)
{
arr[i][1] = i; //第1列,表示第i个选手
b[i] = b[i+m] = i+1;
}
for(i=1; i<=m; i++) //第2列~第n列,相当于旋转多边形,确定哪个选手和哪个选手比赛
{
arr[1][i+1] = b[i]; //每列中的第一个数字
arr[b[i]][i+1] = 1;
for(int j=1; j<=m/2; j++) //每列中的其余数字
{
arr[b[i+m-j]][i+1] = b[i+j]; //相当于水平线连起来的两个顶点
arr[b[i+j]][i+1] = b[i+m-j];
}
}
}
int main()
{
int n;
cout << "输入参加比赛的运动员数量:";
cin >> n;
construct(n);
cout << "循环赛日程表为:\n";
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
cout << arr[i][j] << "\t";
cout << endl;
}
return 0;
}
网球循环赛日程表--多边形法
最新推荐文章于 2024-05-01 19:29:28 发布