n个选手进行循环赛(n=2^m,m为正整数),每个选手都要与另外n-1个选手进行一场比赛,怎样安排对阵表呢?
我们先看最简单的情况:
对阵呈现对称性,可以用一个二维数组表示,可以从第一个元素开始,按人数进行对称映射和循环:
//循环比赛
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <iomanip>
using namespace std;
int i,j,h,person,n;
int a[32+1][32+1];
int main()
{
cout<<"请输入选手人数(2,4,8,16,32):";
cin>>person;
a[1][1]=1;
h=1;
do
{
for(i=1;i<=h;i++)
for(j=1;j<=h;j++)
{
a[i][j+h]=a[i][j]+h;//构造右上角方阵
a[i+h][j]=a[i][j+h];//构造左下角方阵
a[i+h][j+h]=a[i][j];//构造右下角方阵
}
h=h*2;
}while(!(h==person));
for(i=1;i<=person;i++)
{
for(j=1;j<=person;j++)
cout<<setw(4)<<left<<a[i][j];
cout<<"\n";
}
system("pause");
return 0;
}
输出如下:
请输入选手人数(2,4,8,16,32):8
1 2 3 4 5 6 7 8
2 1 4 3 6 5 8 7
3 4 1 2 7 8 5 6
4 3 2 1 8 7 6 5
5 6 7 8 1 2 3 4
6 5 8 7 2 1 4 3
7 8 5 6 3 4 1 2
8 7 6 5 4 3 2 1
-End-
本文暂时没有评论,来添加一个吧(●'◡'●)