循环比赛日程表

循环比赛日程表

张宇昂

·

2019-09-18 18:43:22

·

个人记录

题目描述

设有N个选手进行循环比赛,其中N=2M,要求每名选手要与其他N-1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N-1天,要求每天没有选手轮空。

输入

M(M<=10)

输出

输出:表格形式的比赛安排表

数字与数字之间的用一个空格隔开

样例输入

3

样例输出

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

思路:分治算法,从样例中可以看出,左上和右下的是程对称分布的,所以我们只需要找到规律,完成左上的数字部分,那么根据对称性,即可完成整个的输出。

代码:

include

using namespace std;

int a[10000][2000],m;

int main()

{

cin>>m;

int n=1<

a[1][1]=1;

while(k<=m)

{

for(int i=1;i<=mid;i++)

{

for(int j=1;j<=mid;j++)

{

a[i][j+mid]=a[i][j]+mid;

}

}

for(int i=1;i<=mid;i++)

{

for(int j=1;j<=mid;j++)

{

a[i+mid][j]=a[i][j+mid];

a[i+mid][j+mid]=a[i][j];

}

}

mid*=2;

k++;

}

for(int i=1;i<=n;i++)

{

for(int j=1;j<=n;j++)

{

cout<

}

cout<

}

return 0;

}

Top