循环比赛日程表
张宇昂
·
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; }