题目
设有 n=2k 个运动员要进行网球循环赛。现在要设计一个满足以下要求的比赛日程表
(1)每个选手必须与其他n-1个选手各赛一场
(2)每个选手一天只能赛一次
(3)循环赛一共进行n-1天
按此要求将比赛日程表设计成有n行和n-1列的一个表。表中第i行,第j列处填入第i个选手在第j天所遇到的对手,其中1<=i<=n,1<=j<=n-1。
编写算法实现循环赛日程表。
参考代码
#include<stdio.h>
#include<math.h>
void table(int k){
int i,j,m,temp;
int a[100][100];
int n=2;//人数为2时直接打印矩阵
a[1][1]=1;a[1][2]=2;
a[2][1]=2;a[2][2]=1;
for(m=1;m<k;m++) //系数
{
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; //在人数为2的矩阵数值基础上加
}
}//左下角填充
for(i=1;i<=temp;i++)
{
for(j=temp+1;j<=n;j++)
{
a[i][j]=a[i+temp][j-temp];
}
}//右上角填充
for(i=temp+1;i<=n;i++)
{
for(j=temp+1;j<=n;j++)
{
a[i][j]=a[i-temp][j-temp];
}
}//右下角填充
}
printf("参与人数为:%d\n\n",n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%d ",a[i][j]);
if(j==n)/

本文介绍了一个C语言编程问题,涉及如何设计一个网球循环赛程表,满足每个选手与其他选手各赛一场,每天最多赛一次,并在n-1天内完成全部比赛。给出的解决方案是通过递归或迭代的方式,从小规模矩阵出发,逐步填充赛程表。代码分析部分解释了如何根据矩阵的分布规律构建赛程表,并展示了输入系数k计算参赛人数及打印赛程表的过程。
最低0.47元/天 解锁文章
1851

被折叠的 条评论
为什么被折叠?



