填空题
阅读下列函数说明和C代码,将应填入
(n) 外的字句写在对应栏内。
[说明]
为网球比赛的选手安排比赛日程。设有n(n=2
m)位选手参加网球循环赛,循环赛共进行n-1天,每位选手要与其他n-1位选手赛一场,且每位选手每天赛一场,不轮空。
设n位选手被顺序编号为1,2,…,n,比赛的日程表是一个n行n-1列的表,第i行j列的内容是第i号选手第j天的比赛对手。用分治法设计日程表,就是从其中一半选手(2
m-1位)的比赛日程导出全体2
m选手的比赛日程。从众所周知的只有两位选手的比赛日程出发,反复这个过程,直至为n位选手安排好比赛日程为止。
如两位选手比赛日程表如下所示:
如四位选手比赛日程表如下所示:
| 1 | 2 | 3 |
1 | 2 | 3 | 4 |
2 | 1 | 4 | 3 |
3 | 4 | 1 | 2 |
4 | 3 | 2 | 1 |
函数中使用的预定义符号如下:
#define M 64
int a[M+1][M];
[函数]
voidd main()
int twoml,twom,i,j,m,k;
printf("指定n(=2的k次幂)位选手,请输入k:/n");
scanf("%d",&k);
/*8预设两位选手的比赛日程*/
a[1][1] =2;
a[2][1] =1;
m=1;
twoml=1;
while (
(1) )
m++;
twoml+=twoml;
twom=twoml*2;/*为2^m位选手安排比赛日程*/
/*填日程表的左下角*/
for(i=twoml+1;
(2) ;i++)
for(j=1; j<=twoml-1; j++)
a[i][j]=a[i-twoml][j]+twoml;
/*填日程表的右上角*/
a[1][twoml]=
(3) ;/+填日程表右上角的第1列*/
for(i=2; i<=twoml; i++)
a[i][twoml]=a[i-1][twoml]+1;
/*填日程表右上角的其他列,参照前一列填当前列*/
for(j=twoml+1; j(twom;j++)
for(i=1; i
a[i][j]= (4) ;
a[twoml][j]=a[1][j-1];
/*填日程表的右下角*/
for(j=twoml; j for(i=1;i<=twoml; i++)
a[ (5) [j]=i;
/*输出日程表*/
for(i=1; i<=twom; i++)
for(j=1;j printf("%4d",a[i][j]);
printf("/n");
printf("/n");