#include<stdio.h>
int a[100][100];
int n;//n个选手
void GameTable(int k)
{
n=2;
int t,i,j;
a[1][1]=1;a[1][2]=2;
a[2][1]=2;a[2][2]=1;
for(t=1;t<k;++t)//n=2k人
{
int i,j,temp=n;n=n*2;
//填左下角
for(i=temp+1;i<=n;i++)
for(j=1;j<=temp;j++)
a[i][j]=a[i-temp][j]+temp;
//填右上角
for(i=1;i<=temp;i++)
for(j=temp+1;j<=n;++j)
a[i][j]=a[i+temp][(j+temp)%n];
//填右下角
for(i=temp+1;i<=n;++i)
for(j=temp+1;j<=n;++j)
a[i][j]=a[i-temp][j-temp];
}
}
int main()
{
int k;
scanf("%d",&k);
GameTable(k);
int i,j;
for(i=1;i<=2*k;++i)
{
printf("第%d个选手:",i);
for(j=2;j<=2*k;++j)
printf(" %d",a[i][j]);
printf("\n");
}while(1);
return 0;
}
循环赛时间表(分治策略)
最新推荐文章于 2021-06-28 11:01:05 发布