cout< }
}
}
voidcopy(intn)
{
intm=n/2;
for(inti=1;i<=m;i++)
for(intj=1;j<=m;j++)
{
a[i][j+m]=a[i][j]+m;
a[i+m][j]=a[i][j+m];
a[i+m][j+m]=a[i][j];
}
}
voidtournament(intn)
{
if(n==1)
{
a[1][1]=1;
return;
}
if(odd(n))
{
tournament(n+1);
return;
}
tournament(n/2);
makecopy(n);
}
int odd(intn)
{
if(n%2==1)
return1;
elsereturn0;
}
voidmakecopy(intn) //makecopy与copy算法类似,但是要区分n/2为奇数或偶数的情形
{
if(n/2>1&&odd(n/2))
copyodd(n);
else
copy(n);
}
voidcopyodd(intn) //实现n/2为奇数时的复制
{
intb[SIZE];
intm=n/2;
for(inti=1;i<=m;i++)
{
b[i]=m+i;
b[m+i]=b[i];
}
for(i=1;i<=m;i++)
{
for(intj=1;j<=m+1;j++)
{
if(a[i][j]>m)
{
a[i][j]=b[i];
a[m+i][j]=(b[i]+m)%n;
}
else
a[m+i][j]=a[i][j]+m;
}
for(j=2;j<=m;j++)
{
a[i][m+j]=b[i+j-1];
a[b[i+j-1]][m+j]=i;
}
}
}
结果验证:
当参赛人数为偶数8时
当参赛人数为奇数 7时
六
#include
voidcopy(intn);
voidtour(intn);
voidmakecopy(intn);
voidcopyodd(intn);
inta[100][100];
intb[100];
intmain()
{
intn,i,j;
printf("Pleaseinputn:
\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
a[1][i]=i;
a[i][1]=i;
}
tour(n);
if(n%2==1)
for(i=1;i<=n;i++)
{
for(j=1;j<=n+1;j++)
{
if(a[i][j]==n+1)
printf("");
else
printf("%-4d",a[i][j]);
}
printf("\n");;
}
else
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(a[i][j]==n+1)
printf("");
else
printf("%-4d",a[i][j]);
}
printf("\n");;
}
}
voidcopy(intn)
{
intm=n/2;
inti,j;
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
{
a[i][j+m]=a[i][j]+m;
a[i+m][j]=a[i][j+m];
a[i+m][j+m]=a[i][j];
}
}
voidtour(intn)
{
if(n==1)
{
a[1][1]=1;
return;
}
if(n%2==1)//奇数
{
tour(n+1);
return;
}
tour(n/2);
makecopy(n);
}
voidmakecopy(intn)
{
if(n/2>1&&((n/2)%2))
copyodd(n);
else
copy(n);
}
voidcopyodd(intn)
{
inti,j;
intm=n/2;
for(i=1;i<=m;i++)
{
b[i]=m+i;
b[m+i]=b[i];
}
for(i=1;i<=m;i++)
{
for(j=1;j<=m+1;j++)
{
if(a[i][j]>m)
{
a[i][j]=b[i];
a[m+i][j]=(b[i]+m)%n;
}
else
{
a[m+i][j]=a[i][j]+m;
}
}
for(j=2;j<=m;j++)
{
a[i][m+j]=b[i+j-1];
a[b[i+j-1]][m+j]=i;
}
}
}
展开阅读全文
相关搜索