2908: 【例65.1】 循环比赛
内存限制:64 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:5
解决:3
题目描述
设有$N$个选手进行循环比赛,其中$N=2^M$,要求每名选手要与其他$N−1$名选手都赛一次,每名选手每天比赛一次,循环赛共进行$N−1$天,要求每天没有选手轮空。
输入
输入:$M$
输出
输出:表格形式的比赛安排表。一行各数据间用一个空格隔开。
样例输入 复制
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<bits/stdc++.h> using namespace std; int n; int a[1005][1005]; void deal(int x){ if(x==2){ a[1][1]=1; a[1][2]=2; a[2][1]=2; a[2][2]=1; return; } deal(x/2); for(int i=1;i<=x/2;i++){ for(int j=1;j<=x/2;j++){ a[i+x/2][j]=a[i][j]+x/2; a[i][j+x/2]=a[i][j]+x/2; a[i+x/2][j+x/2]=a[i][j]; } } } int main(){ cin>>n; n=(1<<n); deal(n); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cout<<a[i][j]<<" "; } cout<<endl; } return 0; }