Problem Description
设有N个选手进行循环比赛,其中N=2^M,要求每名选手要与其他N-1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N-1天,要求每天没有选手轮空。
Input
输入第一行为T,表示数据组数,对于每组数据就一个M(1<=M<=10)。
Output
对于每组输入的M,输出表格形式的比赛安排表
Sample Input
1 3
Sample Output
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 Hint 输出每个数用%3d格式。
#include<iostream> #include<cstdio> using namespace std; int a[1030][1030]; int main() { //freopen("a.txt","r",stdin); int t,m,i,j,k=4; a[1][1]=1; a[1][2]=2; a[2][1]=2; a[2][2]=1; while(k<=1024) { for(i=1;i<=k/2;i++) for(j=k/2+1;j<=k;j++) a[i][j]=a[i][j-k/2]+k/2; for(i=k/2+1;i<=k;i++) for(j=1;j<=k/2;j++) a[i][j]=a[j][i]; for(i=k/2+1;i<=k;i++) for(j=k/2+1;j<=k;j++) a[i][j]=a[i-k/2][j-k/2]; k*=2; } scanf("%d",&t); while(t--) { int n=1; scanf("%d",&m); while(m--) n*=2; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("%3d",a[i][j]); printf("\n"); } } return 0; }