循环赛日程表

#include<stdio.h>
#include<math.h>
#define N 50
void GameTable(int k,int array[][N]);
void print(int k,int array[][N]);
main()
{
    int k;
    int array[N][N];
    do
    {
         scanf("%d",&k);
        if(k!=0)
        {
            GameTable(k,array);
            print(k,array);
        }
        else
          printf("您输入的数据有误,请重新输入");
    }while(k!=0);

}
void GameTable(int k,int array[][N])
{
    int i,j,s,t;
    int n=1;
    for(i=1;i<=k;i++)
        n*=2;
    for(i=1;i<=n;i++)
        array[1][i]=i;
    int m=1;
    for(s=1;s<=k;s++)
    {
        n=n/2;
        for(t=1;t<=n;t++)
            for(i=m+1;i<=2*m;i++)
                for(j=m+1;j<=2*m;j++)
                {
                    array[i][j+(t-1)*m*2]=array[i-m][j+(t-1)*m*2-m];
                    array[i][j+(t-1)*m*2-m]=array[i-m][j+(t-1)*m*2];
                }
        m*=2;
    }

}
void print(int k,int array[][N])
{
    int i,j;
    int num=pow(2,k);
    printf("%d人的循环赛日程表如下\n",num);
    for(i=1;i<=num;i++)
    {
        for(j=1;j<=num;j++)
        {
            printf("%d\t",array[i][j]);
        }
         printf("\n");
    }
}
0

Leave a Reply

Your email address will not be published.