设有N个选手进行循环比赛,其中N=2^MM,要求每名选手要与其他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,a[101][101];
void cuttt(int x,int y,int s,int shit) {
int t=pow(2,s);
if(t==1) {
a[x][y]=shit;
return;
}
cuttt(x,y,s-1,shit);
cuttt(x+t/2,y+t/2,s-1,shit);
cuttt(x+t/2,y,s-1,shit+t/2);
cuttt(x,y+t/2,s-1,shit+t/2);
}
int main() {
scanf("%d",&n);
cuttt(1,1,n,1);
n=pow(2,n);
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}