循环赛日程表

 1 //2^n个运动员
 2 #include<stdio.h>
 3 int a[100][100];
 4 int n;
 5 
 6 void fun(int n)
 7 {
 8     int u,v,j,i;
 9     if(n==0) a[n][n]=1;
10     else
11     {
12         fun(n-1);
13         u=1<<(n-1);
14         v=1<<n;
15         for(i=0;i<u;i++)
16             for(j=u;j<v;j++)
17                 a[i][j]=a[i][j-u]+u;
18         for(i=u;i<v;i++)
19             for(j=0;j<u;j++)
20                 a[i][j]=a[i-u][j+u];
21         for(i=u;i<v;i++)
22             for(j=u;j<v;j++)
23                 a[i][j]=a[i-u][j-u];
24     }
25 }
26 
27 int main( )
28 {
29     int i,j;
30     while(scanf("%d",&n),n)
31     {
32         fun(n);
33         for(i=0;i<(1<<n);i++)
34         {
35             for(j=0;j<(1<<n);j++)
36                 printf("%d ",a[i][j]);
37             printf("\n");
38         }
39     }
40     return 0;
41 }
42 
43     
原文地址:https://www.cnblogs.com/xiaofanke/p/3051617.html