设有n位选手参加网球循环赛,n=2^k,循环赛共进行n-1天,每位选手要与其他n-1位选手比赛一场,且每位选手每天比赛一场,不能轮空,按一下要求为比赛安排日程, (1) 每位选手必须与其他n-1格选手格赛一场; (2) 每个选手每天只能赛一场; (3) 循环赛一共进行n-1天;
请按此要求将比赛日程表设计成有n行和n-1列的一个表。在表中的第i行和第j列处填入第i个选手在第j天所遇到的选手,其中1≤i≤n,1≤j≤n-1。
代码部分:
#include<stdio.h>
#define N 64
int a[N][N];
int x; //填充值
void digui(int i,int j,int n,int x)
{
if(n==1)
{
a[i][j]=x;
return ;
}
//填充x
digui(i,j,n/2,x); //填充左上角
digui(i+n/2,j+n/2,n/2,x);//在上一个递归执行完回退一次后的循环中执行 填充右下角
digui(i,j+n/2,n/2,x+n/2);//在上一个递归执行完回退一次后的循环中执行 填充右上角
digui(i+n/2,j,n/2,x+n/2);//在上一个递归执行完回退一次后的循环中执行 填充左下角
}
int main()
{
int n;
int i,j;
x =1;
scanf("%d",&n);
digui(0,0,n,x);//起始位置为(0,0),总人数为n
for(i=0;i<n;i++)
{
for(j=0;j<n-1;j++)
{
printf("%d ",a[i][j]);
}
printf("%d\n",a[i][n-1]);
}
return 0;
}