这是一个拍出循环赛程的代码,但是中间有错的地方,算法采用分治算法的思路
#include<stdio.h>
#define MAXSIZE 64
int a[MAXSIZE+1][MAXSIZE+1]={0};
void fun(int k,int n)
{
int i,j;
if(n==2)
{
a[k][1]=k;
a[k][2]=k+1;
a[k+1][1]=k+1;
a[k+1][2]=k;
}
else
{
fun(k,n/2);
fun(k+n/2,n/2);
for(i=k;i<k+n/2;i++)
{
for(j=k+n/2;j<=n;j++)
{
a[i][j]=a[i+n/2][j-n/2];
}
}
for(i=k+n/2;i<=n;i++)
{
for(j=k+n/2;j<=n;j++)
{
a[i][j]=a[i-n/2][j-n/2];
}
}
}
}
int main(void)
{
int i,j,n;
printf("输入参加比赛的人数:");
scanf("%d",&n);
j=1;
for(i=1;i<=6;i++)
{
j*=2;
if(j==n)
break;
}
if(i>6)
{
printf("才赛人数须为2的整数次幂,并且不大于64\n");
return 0;
}
fun(1,n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
return 0;
}
本文介绍了一个利用分治算法生成循环赛程的代码实现,详细解释了算法思路并在代码中进行了实践。

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



